每种模式都有与之对应的原理
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。其属于创建型模式,它向我们提供一种创建对象的最佳方式。
其是将构造方法私有化,从而使得外部无法产生新的实例化对象,只能通过方法获取唯一的一个对象引用
特点:
1. 一个类中只有一个实例化对象
2. 必须自行创建实例
3. 必须在自行向整个系统提供实例
两种不同的形式:饿汉模式与懒汉模式
饿汉模式:即在创建对象时直接实例化。 ”线程安全“
public class SingletonMode {
//创建唯一的静态实例
private static SingletonMode instance = new SingletonMode();
//私有化构造方法
private SingletonMode(){
}
//创建获取方法
public static SingletonMode getInstance() {
return instance;
}
}
它是一种空间换时间的做法,无论你是否使用该实例,我先创建好该实例,使用时直接调用便好,这样在调用过程中就省去了开辟空间的操作了,可以节省时间,但不用是又造成垃圾产生。
使用场景:
- 如果在构造方法里写了性能消耗较大,占时较久的代码,比如建立与数据库的连接,那么就会在启动的时候感觉稍微有些卡顿 - 无论是否使用这个对象都立即加载
懒汉模式:需要调用对象是在实例化。 ”非线程安全“
public class SingletonMode {
private static SingletonMode instance;
private SingletonMode(){
}
public static SingletonMode getInstance() {
if (instance == null){
instance = new SingletonMode();
}
return instance;
}
}
是一种时间换空间的做法,调用时在创建。
看业务需求,如果业务有比较充分的启动和初始化时间,就使用饿汉模式,否则就使用懒汉模式
单例模式优点:
- 内存中只有一个对象
- 避免频繁的创建销毁对象,提高了性能
- 避免对共享资源的多重占用
缺点:
- 扩展比较困难
- 若实例化后的对象长期不用,系统会默认其为垃圾并进行回收,造成对象状态丢失。
使用场景:
1、创建对象时占用资源过多,但同时又需要用到该类对象 2、对系统内资源要求统一读写,如:读写配置信息 3、当多个实例存在可能引起程序逻辑错误,如:号码生成器



