シングルトン作成を対象のクラスでgetInstance()メソッドを用意しないで、作成専用のクラスを
用意するとしたら。。。Google guice を使うと面白いかも。。
なんだか、お遊びコードである。
import java.util.HashMap;
import java.util.Map;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
public final class SingleManager{
private static SingleManager inst;
private Map<Class<?>,Object> map;
private SingleManager(){
this.map = new HashMap<Class<?>,Object>();
}
public final static synchronized SingleManager getInstance(){
if (inst==null) inst = new SingleManager();
return inst;
}
public synchronized Object create(Class<?> cls){
if (!this.map.containsKey(cls)){
Injector injector = Guice.createInjector(
// 任意のバインド定義
new AbstractModule(){
@Override
protected void configure(){
binder().bind(String.class).toInstance("uran");
}
}
//,new AbstractModule(){...}
);
this.map.put(cls,injector.getInstance(cls));
}
return this.map.get(cls);
}
}
------------------------------------------
SingleManager sm = SingleManager.getInstance();
Asingle a = (Asingle)sm.create(Asingle.class);
-------------------------------------------
import com.google.inject.Inject;
public final class Asingle{
private String name;
@Inject
private Asingle(String s){
this.name = s;
}
public String getName(){
return this.name;
}
}