美文网首页
设计模式之:单例模式

设计模式之:单例模式

作者: 筱南独舞 | 来源:发表于2016-09-03 18:33 被阅读32次

    实现单例应该注意以下4点:

    1. 构造函数不对外开放,一般为private;
    2. 通过一个静态方法或者枚举返回单例类对象;
    3. 确保单例的对象有且仅有一个,尤其是在多线程环境下;
    4. 䧁单例类对象在反序列化时不会被重新构建对象。

    1. 饿汉单列模式

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

    2. 懒汉单列模式

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

    3. 懒汉单列模式(双重校验)

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

    4. 静态内部类单列模式

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

    5. 枚举单列模式

    public enum Singleton {
        INSTANCE;
    }
    

    6. 容器实现单列模式

    public class Singleton {
        private Singleton() {};
        private static Map<String, Object> objects = new HashMap<String, Object>();
        public static void registe (String key, Object instance) {
            if (!objects.containsKey(key)) objects.put(key, instance);
        }
        public static Object get () {
            return objects.get(key);
        }
    }
    

    注:。。。

    相关文章

      网友评论

          本文标题:设计模式之:单例模式

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