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

单例模式

核心:构造器私有
缺陷:不安全,建议才用枚举进行
饿汉单例
举例: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;
	}
}

工厂模式

实现创建者和调用者的分离

举例:sqlsessionFactory

本质:实例化对象不用new,用工厂代替
		实现类和创建对象统一管理和控制,从而将调用者和实现类的耦合度降低


分类:
		1.简单工厂模式(使用较多)
		2.工厂方法模式
		3.抽象工厂模式	

需要为满足oop七大原则

1.简单工厂模式(使用较多):
		缺点:增加新的产品必须修改代码(不满足开闭原则)
2.工厂方法模式:
		缺点:每建立一个产品都需要建立一个工厂

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值