一、功能
保证一个类仅有一个实例。
二、优缺点
singleton模式是做为\"全局变量\"的替代品出现的。所以它具有全局变量的特点:全局可见、贯穿应用程序的整个生命期,它也具有全局变量不具备的性质:同类型的对象实例只可能有一个。
三、实现
教科书上的singleton定义如下:
class singleton singleton* singleton::_instance = null ; singleton* singleton::instance() |
(1)因为返回的是指针,为防止用户调用delete函数,可把static singleton *_instance;改为在instance()中定义static singleton _instance。这样显然更安全,同时也具有lazy initialization的特性(即第一次访问时才创建)。
(2)假设需要从singleton派生子类,而子类也需要有同样的性质,既只能创建一个实例。我觉得,这很难办。根本原因在于instance()函数不是虚函数,不具有多态的性质。一种常用方法是把instance()函数移到子类中,这时就只能用static singleton *_instance,而不能用static singleton _instance了,除非把_instance也要移到子类,无论怎么做都不优雅。另一种方法是用模板。具体用什么方法,只能根据实际情况权衡。