美文网首页
单例模式

单例模式

作者: Viknando | 来源:发表于2017-05-09 21:54 被阅读0次

    饿汉模式:

    public class Singleton {
       private static final Singleton instance = new Singleton();
    
       private Singleton() {
       }
    
       public static synchronized Singleton getInstance() {
           return instance;
       }
    }
    

    懒汉模式:

    public class Singleton {
        private static Singleton instance;
    
        private Singleton() {
        }
    
        public static Singleton getInstance() {
            if (instance == null) {
                instance == new Singleton();
            }
            return instance;
        }
    }
    

    Double CheckLock(DCL)实现单例

    public class Singleton {
        private static Singleton instance;
    
        private Singleton() {
        }
    
        public static Singleton getInstance() {
            if (instance == null) {
                synchronized (Singleton.class) {
                    if (instance == null)
                        instance = new Singleton();
                }
            }
            return instance;
        }
    }
    
    

    静态内部类实现单例

    public class Singleton {
        private Singleton() {
        }
    
        public static Singleton getInstance() {
            return SingletonHolder.mInstance;
        }
    
        /**
         * 静态内部类
         */
        private static class SingletonHolder {
            private static final Singleton mInstance = new Singleton();
        }
    }
    
    

    枚举单例

    public class Test {
        public static void main(String args[]) {
            Singleton.INSTANCE.doSomething();
            Singleton.INSTANCE2.doSomething();
        }
    
        public enum Singleton {
            INSTANCE(1),
            INSTANCE2(2){
                @Override
                public void doSomething() {
                    System.out.print("Instance 2");
                }
            };
    
            public void doSomething() {
                System.out.println("just do it");
            }
            Singleton(int i){
                System.out.println("instance "+i);
            }
        }
    }
    
    result:
    instance 1
    instance 2
    just do it
    Instance 2
    

    使用容器实现单例模式

    public class SingletonManager {
        private static Map<String,Object> objectMap=new HashMap<>();
        
        public static void registerService(String key,Object value){
            if(!objectMap.containsKey(key))
                objectMap.put(key,value);
        }
        public static Object getService(String key){
            return objectMap.get(key);
        }
    }
    

    Android源码中的单例模式:

    获取服务的时候
    public static LayoutInflater from(Context context) {
            LayoutInflater LayoutInflater =
                    (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            if (LayoutInflater == null) {
                throw new AssertionError("LayoutInflater not found.");
            }
            return LayoutInflater;
        }
    

    相关文章

      网友评论

          本文标题:单例模式

          本文链接:https://www.haomeiwen.com/subject/wwmitxtx.html