其他分享
首页 > 其他分享> > 设计模式--单例模式(含枚举)

设计模式--单例模式(含枚举)

作者:互联网

单例模式

核心:构造器私有
缺陷:不安全,建议才用枚举进行

饿汉单例

举例:ErrorContext和LogFactory

缺点:易造成资源浪费
class HungryMan{
	private HungryMan(){}
	
	private final static HungryMan hungryMan=new HungryMan();

	public static HungryMan getInstance(){
		return hungryMan;
	}
}

懒汉单例(DCL)

class LazyMan{
	private LazyMan(){}
	//colatile 实现原子性操作
	private volatile static LazyMan lazyMan=null;
	//双重检测锁
	public static LazyMan getInstance(){
		if(lazyMan==null){
			synchronized(LazyMan.class){
				if(lazyMan==null){
				lazyMan=new LazyMan();
				}
			}
		}
	}
	return lazyMan;
}
原子性操作(是不需要synchronized):所谓原子操作是指不会被线程调度机制打断
			的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何
			 context switch (切换到另一个线程)

原子性操作的过程:(这属于底层,不能理解可前往学习JUC)
						1.分配内存空间
						2.执行构造方法,初始化对象
						3.将对象指向这个空间

若不是原子性操作可能会执行的顺序为132等情况,从而产生指令重排的问题

静态内部类

感觉没啥作用
class A{
	private A(){}
	public static getInstance(){
		return InnerClass.a;
	}
	
	public static Class InnerClass{
		private static final A a=new A();
	}
	
}

枚举

解决单例模式不安全的问题
单例模式易被反射破解
public Enum EnumSingle(){
	INSTANCE;
	public EnumSingle getInstance(){
		return INSTANCE;
	}
}

本文章在学习狂神说的单例模式后整理(B站搜索狂神说)同时参考了百度百科等网络资源

标签:--,private,LazyMan,HungryMan,static,单例,设计模式,public
来源: https://blog.csdn.net/Caiabcd/article/details/118067281