设计原则&模式:单例模式(创建型)
定义:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。
五种实现方式:
- 饿汉式
- 懒汉式
- 双重校验
- 静态内部类
- 枚举类
饿汉式
特点:线程安全,调用效率高,但是不能延时加载
public class SingletonDemo01{
private static SingletonDemo1 instance = new SingletonDemo1();
private SingletonDemo1(){}
public static SingletonDemo1 getInstance(){
return instance;
}
}
懒汉式
特点:线程安全,调用效率不高,但是能延时加载
public class SingletonDemo2{
//类初始化时,不初始化这个对象(延时加载,真正用的时候再加载)
private static SingletonDemo2 instance;
//构造器私有化
private SingletonDemo2(){}
//方法同步,调用效率低
public static synchronized SingletonDemo2 getInstance(){
if(instance == null){
instance = new SingletonDemo2();
}
return instance;
}
}
双重校验
public class SingletonDemo3{
private volatile static SingletonDemo3 singletonDemo3;
private SingletonDemo3(){
}
public static SingletonDemo3 newInstance(){
if(singletonDemo3 == null){
synchronized (SingletonDemo3.class){
if(singletonDemo3 == null){
singletonDemo3 = new SingletonDemo3();
}
}
}
return singletonDemo3;
}
}
静态内部类
特点:线程安全,调用效率高,可以延时加载
public class SingletonDemo4{
/* 静态内部类 */
private static class SingletonClassInstance{
private static final SingletonDemo4 instance = new SingletonDemo4();
}
private SingletonDemo4(){}
public static SingletonDemo4 getInstance(){return SingletonClassInstance.instance;}
}
枚举类
public enum SingletonDemo5{
// 枚举元素本身就是单例
INSTANCE;
// 添加自己需要的操作,直接通过SingletonDemo5.INSTANCE.doSomething()的方式调用即可。
public void doSomething(){System.out.println("doSomething");}
}
class Test{
public static void main(String[] args){SingletonDemo5.INSTANCE.doSomething();}
}
END

浙公网安备 33010602011771号