一.总结
单例模式是一种十分简单的设计模式,在程序中只有一个实例,占用空间小,但是方法多难扩展,我在项目中一般定义为工具类或者管理者。单例模式有不同的写法,我推荐用静态内部类或者枚举类的方式, 双重加锁的懒汉模式在一些代码检查工具如PMD中会提示线程不安全。通用类图如下:
二.常见的写法
-
懒汉模式
public class LazySingleton { private static LazySingleton instance; private LazySingleton() { } public static LazySingleton getInstance() { if (instance == null) { synchronized (LazySingleton.class) { if (instance == null) { instance = new LazySingleton(); } } } return instance; } }
-
饿汉模式
public class HungrySingleton { private static final HungrySingleton instance = new HungrySingleton(); private HungrySingleton() { } public static HungrySingleton getInstance() { return instance; } }
-
静态内部类方式
public class InnerClassSingleton { private InnerClassSingleton() { } private static class Holder { private static InnerClassSingleton instance = new InnerClassSingleton(); } public static InnerClassSingleton getInstance() { return Holder.instance; } }
-
枚举类方式
public enum EnumSingleton { // INSTANCE INSTANCE() }