单例模式
单例模式是一种对象创建模式,确保系统中一个类只有一个实例
优点:
- 省略对象创建的时间
- 内存使用频率减少,减轻GC压力,缩短GC时间
参与者
角色 | 作用 |
---|---|
单例类 | 提供单例工厂,返回单例 |
使用者 | 获取并使用单例类 |
简单代码
package com.example.demo;
public class SingleTon {
private SingleTon() {
System.out.println("SingleTon is create");
}
private static final SingleTon instance = new SingleTon();
public static SingleTon getInstance() {
return instance;
}
public static void createString() {
System.out.println("createString");
}
}
缺点:调用createString方法时,触发构造函数
懒加载
package com.example.demo;
public class LazySingleTon {
private LazySingleTon() {
System.out.println("LazySingleTon is create");
}
private static LazySingleTon instance = null;
public static synchronized LazySingleTon getInstance() {
if (instance == null) {
instance = new LazySingleTon();
}
return instance;
}
}
添加synchronized防止多线程创建多个对象
缺点:
1.多线程情况下,耗时较长
再次改造
package com.example.demo;
public class StaticSingleTon {
private StaticSingleTon() {
System.out.println("StaticSingleTon is create");
}
private static class SingleTonHolder {
private static StaticSingleTon instance = new StaticSingleTon();
}
public static StaticSingleTon getInstance() {
return SingleTonHolder.instance;
}
public static void createString() {
System.out.println("createString");
}
}