单例模式
单例模式:一个类只能创建一个对象
场景:对于一些配置文件,数据操作的对象
5种常见单例
(1)饿汉式单例:在初始时new静态对象,缺点,不支持延时加载
(2)懒汉式单例:在getinstance中new 静态对象,加了锁,性能不好,支持延时加载
(3)双重检查单例:
public class IdGenerator {
private static IdGenerator Single;
<pre><code>private IdGenerator() {
}
public synchronized IdGenerator getInstance() {
if (Single == null) {
synchronized (IdGenerator.class) {
if (Single == null) {
Single = new IdGenerator();
}
}
}
return Single;
}
}
支持延时加载,低版本java,由于指令重排序,可能Single还没有初始化好,其他线程就在使用了,可以加 volatile关键字解决,高版本已经没有问题了
(4)静态内部类单例
public class IdGenerator {</p>
<pre><code>private IdGenerator() {
}
public static class Single {
private static IdGenerator idGenerator = new IdGenerator();
}
public static IdGenerator getIdGenerator() {
return Single.idGenerator;
}
}
支持延时加载,性能好
(5)枚举式单列
public enum IdGenerator {
INSTANCE;
private AtomicInteger atomicInteger = new AtomicInteger();</p>
<pre><code>public int getid() {
return atomicInteger.get();
}
}
支持延时加载,性能好
单例模式的缺点:
1.对OOP特性支持不友好
2.隐藏类之间依赖关系
3.对代码拓展性不好
4.对单元测试不友好
5.不支持有参数的构造函数
评论区