一.概念
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
类图:
类图知识点:
1.类图分为三部分,依次是类名、属性、方法
2.以<<开头和以>>结尾的为注释信息
3.修饰符+代表public,-代表private,#代表protected,什么都没有代表包可见。
4.带下划线的属性或方法代表是静态的。
二.实现
1.不考虑性能
public class Singleton{
private Singleton(){};
private static Singleton singleInstance;
public synchronized static Singleton getInstance() {
if (singleInstance== null) {
singleInstance= new Singleton();
}
return singleInstance;
}
}
2.考虑性能:双重锁定(Double-Check Locking)
public class Singleton{
private Singleton(){};
private volatile static Singleton singleInstance;
public static Singleton getInstance() {
if (singleInstance== null) {
synchronized (Singleton.class) {
if (singleInstance== null) {
singleInstance= new Singleton ();
}
}
}
return singleInstance;
}
}
volatile:确保多个线程正确处理变量
三.应用场景
1.工具类:LogUtil
2.数据库操作类:
3.线程池、缓冲Cache: