单例知识图谱
1、介绍
单例模式:强调在任何情况下都只有且只有一个实例。并且提供一个访问点。
特点:
- 构造函数私有化。
- 提供一个访问点
2、应用场景
3、单例模式分类
饿汉式单例:
在单例类首次加载时就创建出实例
- 【示例】
/**
* All rights Reserved, Designed By www.pousheng.com
* 饿汉:单例类加载时候就已经产生实例。
* 单例模式:1、构造函数私有化 2、提供一个调用点
* 缺点:占用资源
*/
public class HungrySingleTon {
// final 是防止在反射,或者序列化时候出现多个实例
private static final HungrySingleTon instance = new HungrySingleTon();
// 构造函数私有化(关闭访问)
private HungrySingleTon() {}
public static HungrySingleTon getInstance(){
return instance;
}
}
缺点:占资源
特点:单例类加载时候就已经产生实例,线程安全。
懒汉方单例 -- 线程非完全
- 线程非安全
public class LazySingleton {
private static LazySingleton INSTANCE = null;
private LazySingleton(){}
public static LazySingleton getInstance(){
if(INSTANCE ==null){
INSTANCE = new LazySingleton();
}
return INSTANCE;
}
}
缺点
:线程不安全
双重检查锁
枚举式单例
注册式单例
4、设计单例模式考虑事项
- 私有化构造器
- 保证线程安全
- 延迟加载
- 防止序列化和反序列化破坏单例
- 防御反射攻击单例
网友评论