设计模式_单例模式

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


优点:


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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值