单例(Singleton)模式
2021-05-07 本文已影响0人
quanCN
简介
单例模式有以下特点:
- 单例类只能有一个实例
- 单例类必须自己创建自己的唯一的实例
- 单例类必须给所有其他对象提供这一实例
单例类的简略图如下:

饿汉单例模式-Eager Singleton
-
类图
- 实现
public class EagerSingleton { //饿汉式单例类.在类初始化时,已经自行实例化 private static final EagerSingleton EAGER_SINGLETON = new EagerSingleton(); private EagerSingleton() { } public static EagerSingleton getInstance() { return EAGER_SINGLETON; } }
- 总结
- 这个类被加载时,静态变量就会被初始化
- 构造函数私有化(不可继承)
懒汉单例模式
-
类图
- 实现
public class LazySingleton { private static LazySingleton lazySingleton=null; private LazySingleton() { } public static synchronized LazySingleton getInstance() { if (lazySingleton==null){ lazySingleton=new LazySingleton(); } return lazySingleton; } }
饿汉VS懒汉
-
资源利用率
- 饿汉模式 差
- 懒汉模式 好
饿汉模式在自己被加载时就将自己实例化,而懒汉模式则是需要才实例化
-
速度和反应时间
- 饿汉模式 好
- 懒汉模式 差
懒汉模式必须处理好多线程同时首次引用此类时的访问限制问题,而实例初始化也有可能非常耗时,这会使多线程同时首次引用此类的概率变的极大