1.模式定义
:单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
2.应用场景
在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应用程序的日志对象、数据库的连接池、网站的计数器、Web 应用的配置对象、应用程序中的对话框、系统中的缓存等常常被设计成单例。
3.类图
4.实例
懒汉模式
public class Singleton {
private static Singleton instance;
private Singleton(){}
//懒汉模式
public static Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
恶汉模式
public class SingletonByEH {
private SingletonByEH(){
}
private static SingletonByEH instence=new SingletonByEH();
//恶汉模式
public static SingletonByEH getInstance(){
return instence;
}
}
双重校验锁模式
public class SingletonByVolite {
private SingletonByVolite(){}
private static volatile SingletonByVolite instance;
public static SingletonByVolite getInstance(){
if(instance==null){
synchronized (SingletonByVolite.class){
if(instance==null){
instance=new SingletonByVolite();
}
}
}
return instance;
}
}
静态内部类
public class SingletonByInnerClass {
private SingletonByInnerClass(){
}
private static SingletonByInnerClass instance;
public static class Instance{
public static SingletonByInnerClass getInstance(){
instance=new SingletonByInnerClass();
return instance;
}
}
}
枚举
public enum SingletonEnum {
INSTENCE;
public void doSomeThing(){
System.out.println("aaa");
}
}