单例模式

2017-08-03  本文已影响14人  cy_why
单例模式
饿汉单例模式
public class A{
    private static final A a = new A();
    private A(){}
    public static A getInstance(){
        return a;
    }
}
懒汉模式
public class A{
    private static final A a;
    private A(){}
    public static synchronized A getInstance(){
        if(a == null){
            a = new A();
        }
    }
}
Double Check Lock(DCL模式)
public class A{
    private static A a = null;
    private A(){}
    public static A getInstance(){
        if (a == null){
            synchronized(A.class){
               if(a == null){
                   a = new A();
               }
            }
          }
          return a;
    }
}
静态内部类单例模式
public class A{
    private A(){}
    public static A getInstance(){
        return AHolder.instance;
    }
    private static class AHolder{
        private static final A instance = new A();
    }
}
枚举单例
public enum A{
   INSTANCE;
   public void doSomething(){
       System.out.println("");
   }
}
private Object readResolve() throws ObjectStreamException{
    return instance;
}
使用容器实现单例模式
public class A{
    private static Map<String,Object> objectMap = new HashMap<String,Object>();
    private A(){}
    public static void registerService(String key,Object instance){
        if(!objectMap.containsKey(key)){
            objectMap.put(key,instance);
        }
     }
    public static Object getService(String key){
        return objectMap.get(key);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读