单例模式

单例模式

  1. 静态常量饿汉式

    class Singleton {
        private static Singleton instance = new Singleton;
        private Singleton() {}
        public static Singleton getInstance() {
            return instance;
        }
    }
    
  2. 静态代码块饿汉式

    class Singleton {
        private static Singleton instance;
        static {
            instance = new Singleton();
        }
        private Singleton() {}
        public static Singleton getInstance() {
            return instance;
        }
    }
    
  3. 线程不安全懒汉式

    class Singleton {
        private static Singleton singleton;
        private Singleton() {}
        public static Singleton getInstance() {
            if (singleton == null) {
                singleton = new Singleton();
            }
        }
        return singleton;
    }
    
  4. 线程安全懒汉式

    class Singleton {
        private static Singleton singleton;
        private Singleton() {}
        public static synchronized Singleton getInstance() {
            if (singleton == null) {
                singleton = new Singleton();
            }
        }
        return singleton;
    }
    
  5. 同步代码块懒汉式

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

    class Singleton {
        private static volatile Singleton singleton;
        private Singleton(){}
        public static Singleton getInstance() {
            if (singleton == null) {
                synchronized (Singleton.class) {
                    if (singleton == null) {
                        singleton = new Singleton();
                    }
                }
            }
        }
        return singleton;
    }
    
  7. 静态内部类 (类加载时候不会加载静态内部类)

    class Singleton {
        private Singleton(){}
        private static class SingletonInstance {
            private static final Singleton INSTANCE = new Singleton();
        }
        public static Singleton getInstance() {
            return SingleInstance.INSTANCE;
        }
    }
    
  8. 枚举方式

    enum Singleton {
        INSTANCE;
        public void method(){
            // 方法
        }
    }
    
posted @ 2021-10-15 14:09  SuperJH  阅读(35)  评论(0)    收藏  举报