シングルトン作成を変わったかたちで、

シングルトン作成を対象のクラスで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;
   }
}