设计模式学习——单例模式
作者:互联网
「保证类只有一个实例」的设计模式就是单例模式。
1.饿汉式
在类加载时创建,方法的返回创建好的实例,,无法懒加载。
public class HungryMan {
private static HungryMan hungryMan = new HungryMan();
private HungryMan() {
}
public static HungryMan getInstance() {
return hungryMan;
}
}
2.懒汉式
按需加载,且加载一次
2.1非线程安全版
public class LazyMan {
private static LazyMan lazyMan;
private LazyMan(){}
public static LazyMan getInstance(){
if (lazyMan == null){
lazyMan = new LazyMan();
}
return lazyMan;
}
}
2.2DoubleCheckedLocking
public class LazyMan {
private volatile static LazyMan lazyMan;//volatile保证线程可见性和禁止指令重排序
private LazyMan(){}
public static LazyMan getInstance(){
if (lazyMan == null){
synchronized (LazyMan.class){
if (lazyMan == null){//引用放在线程对应虚拟机栈,非线程共享,需volatile修饰
lazyMan = new LazyMan();
}
}
}
return lazyMan;
}
}
2.3静态内部类
public class LazyMan {
private static class LazyManHolder{
private static LazyMan lazyMan = new LazyMan();
}
private LazyMan(){}
public static LazyMan getInstance(){
return LazyManHolder.lazyMan;
}
}
2.4Enum
不仅可以解决线程同步,还可以防止反序列化
public enum LazyMan {
INSTANCE;
}
标签:class,private,LazyMan,public,static,模式,单例,设计模式,lazyMan 来源: https://www.cnblogs.com/heyufeng0313/p/14748951.html