单例模式主要的使用场景是:
1)共享资源冲突访问
2)全局唯一类
从实现方式上,单例模式有
1)懒汉式。使用时再生成,可能会造成使用时的性能问题。其实现方式有全局锁的方式,double check方式
`
public class IdGenerator {
private AtomicLong id = new AtomicLong(0);
private static IdGenerator instance;
private IdGenerator() {}
public static IdGenerator getInstance() {
if (instance == null) {
synchronized(IdGenerator.class) { // 此处为类级别的锁
if (instance == null) {
instance = new IdGenerator();
}
}
}
return instance;
}
public long getId() {
return id.incrementAndGet();
}
} 2)饿汉式。初始化时直接生成,不知道延迟加载,但是不会影响运行时的性能。
public class IdGenerator {
private AtomicLong id = new AtomicLong(0);
private static final IdGenerator instance = new IdGenerator();
private IdGenerator() {}
public static IdGenerator getInstance() {
return instance;
}
public long getId() {
return id.incrementAndGet();
}
} `
单例方式的主要问题是:
1)不支持构造参数
2)不方便测试
3)可扩展性不强
4)某种程度上隐藏了类之间的依赖关系
5)对OOP的特性不友好
此文章为3月Day11学习笔记,内容来源于极客时间《设计模式之美》