单件模式

第五个模式:单件模式

5.1问题引入:

有一些对象我们其实只需要一个,比方说:线程池,缓存,对话框,处理偏好设置和注册表的对象,日志对象,充当打印机、显卡等设备的驱动程序的对象。

5.2解决方案1:

wps555B.tmp

单件模式:确保一个类只有一个实例,并提供一个全局访问点

让我们来看看代码:getInstance()是静态的,这意味着它是一个类方法,所以可以在代码的任何地方使用Singleton.getInstance()访问它。这和访问全局变量一样简单,只是多了一个优点:单件可以延迟实例化。

缺点:会造成线程不安全!

wpsCA4D.tmp

 

解决办法:只要把getInstance()方法编程同步的(synchronized)方法,多线程灾难几乎可以轻易地解决了;但是,只有第一次执行此方法时,才真正需要同步。换句话说,一旦设置好了uniqueInstance变量,就不再需要同步这个方法了。之后每次调用这个方法时,同步都是一种累赘。

解决办法:

1.如果getInstance()的性能对应用程序不是很关键,就什么都别做;

2.使用“急切”创建实例,而不用延迟实例化方法;

3.用“双重检查加锁”,在getInstance()中减少使用同步;

wps2C79.tmp

posted @ 2015-05-14 16:42  maverick_fu  阅读(173)  评论(0编辑  收藏  举报