1.单例模式:单例对象的类必须只有一个实例存在
饿汉模式:类加载时创建(不存在线程安全问题 但是会影响项目启动时间)
public class Singleton { private static Singleton singleton; public static Singleton getSingleton() { return singleton; } }
懒汉模式:使用时加载
1.线程不安全版本
public class Singleton { private static Singleton singleton; public static Singleton getSingleton() { if (singleton == null) { singleton = new Singleton(); } } return singleton; } }
2.线程安全版本(DCL模式 多重检测锁)
public class Singleton { private static Singleton singleton; public static Singleton getSingleton() { //可能存在的逻辑处理 if (singleton == null) { synchronized (singleton) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
为什么不直接对getSingleton方法使用synchronized关键字:如果直接对方法使用synchronized关键字,虽然可以达到效果,但是锁的粒度过于大,而且可能中间还存在很多的逻辑处理2
2.策略模式
3.工厂模式