单件模式

来源:互联网 发布:2017年时代网络诗人奖 编辑:程序博客网 时间:2024/06/14 02:45
需求:有些对象我们其实只需要一个,有时候且只能是一个,例如:线程池、数据库连接、日志、打印机、显卡等设备的驱动程序的对象等。这类对象过多可能导致行为异常、资源使用过量和不一致等问题。在这种环境下,我们就需要使用单件模式也称为单例模式,该模式确保一个类只要一个实例,并提供一个全局的访问点。

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

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

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

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

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