首页 > 代码库 > 设计模式_单例模式

设计模式_单例模式

只包含一个被称为单例类的特殊类。通过单例模式保证系统中,某个类的对象只存在一个。


优点:


1 提供对唯一实例的受控访问。

2 节省内存,系统内存中只存在一个该类的实例

3 防止产生逻辑错误,比如产生序列号,两个实例可能会产生两个相同序列号。

4 允许可变个数的实例。


缺点:


1 时间开销:每次请求引用检查是否存在类的实例,仍需要时间开销,通过静态初始化解决。

2 开发混淆:开发人员需要记住使单例类不能通过new关键字创建。

3 生存周期:基于内存管理的语言(如Java,.Net),只有单例类能够导致实例被取消分配,因为它包含该实例的私有引用;可手动释放内存的语言(如C++),可以删除对象实例,易出现悬浮引用。

4不易扩展:单例模式没有抽象层,不易扩展。

5负面问题:节省资源,将数据库连接池对象设置为单例类,导致共享连接池对象的程序过多造成连接池溢出

6对象丢失:实例化的对象长时间不被利用,在基于内存管理的语言中,会被系统回收,从而导致对象状态丢失


实现:


1 私有,静态,成员变量。

2 私有的构造方法;使实例不能通过new关键字创建。

3 私有的克隆方法;使实例不能被复制或者克隆。

4 静态初始化,getInstance()方法为静态;减少时间开销。


PHP实例

class Singleton{
	private static $_instance = null;	//私有静态变量
	private function __construct(){		//私有构造方法,外部不能通过new获得类的实例
		//..
	}
	private function __clone(){}		//私有克隆方法,不能被复制或者克隆
	public static function getInstance(){	//静态方法获取实例,减少时间消耗
		if(!(self::$_instance instanceof self)){
			self::_instance = new Singleton();
		}
		return self::_instance;
	}
}

1418131414


From ArcticFox


设计模式_单例模式