单件模式

需求:有些对象我们其实只需要一个,有时候且只能是一个,例如:线程池、数据库连接、日志、打印机、显卡等设备的驱动程序的对象等。这类对象过多可能导致行为异常、资源使用过量和不一致等问题。 在这种环境下,我们就需要使用单件模式也称为单例模式,该模式确保一个类只要一个实例,并提供一个全局的访问点。

实现:
单件模式
私有的构造函数可以保证不可在类外创建对象,而提供一个公有的Instance返回这个私有的实例。

多线程: 上述函数仅仅可以在单线程的工程里使用,一旦有多线程那么就有可能创建多个实例。
解决方案1:对instance函数加锁
单件模式
如果性能不是很关键可以使用,但是如果在频繁运行的地方调用那将是个噩梦。

解决方案2:非延迟实例化 即先创建实例,instance里直接返回
单件模式
如果创建对象不是很繁重,且不影响程序启动时可以使用。

解决方案3:局部锁
单件模式
先判断是否为空 然后在里面再进行锁同步,只在第一次创建会进入锁同步。相对于方案1效率高,相对于方案2可以延后创建,不影响程序启动速度以及带来的开始空间浪费问题。

扩展:单件模式并非只能创建一个实例,可以在类中维护多个实例,通过传入参数的方式来决定取那个实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值