设计模式--单件模式(Singleton)

Singleton

设计模式--单件模式(Singleton)

在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率,比方说:线程池(threadpool)、缓存(cache)、对话框、处理偏好设置和注册表的对象、日志对象,充当打印机、显卡等设备的驱动程序的对象。这些类对象只能有一个实例,如果制造出多个实例,就会导致许多问题产生,例如:程序的行为异常、资源使用过量躲着是不一致的结果。遇到这种情况,我们可以通过单件模式来实现,这个模式保证在任何时刻都只有一个对象。

  • 定义: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。

通过维护一个static的成员变量来记录这个唯一的对象实例。

通过提供一个static的接口instance来获得这个唯一的实例。

  • 适用性:

(1) 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。

(2) 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

  • 代码实现:

(1) 单线程Singleton实现

以上代码在单线程情况下不会出现任何问题。但是在多线程的情况下却不是安全的。如两个线程同时运行到 if (instance == null)判断是否被实例化,一个线程判断为True后,在进行创建instance = new SingleThread_Singleton();之前,另一个线程也判断(instance == null),结果也为True。这样就就违背了Singleton模式的原则(保证一个类仅有一个实例)。

(2) 多线程Singleton实现 引入线程保护代码

你可能感兴趣的:(Singleton)