设计模式学习笔记-单例模式

在很多时候,需要控制一个类,全局只要一个实例,以控制唯一访问点。

而我们今天的主角--单例模式

class Single {
	private static $_instance = null; //静止获取
	private $_num = null;
	private function __construct() {} //禁止实例化
	private function __clone() {} //禁止克隆
	public static function getInstance() {  //唯一获取实例的方法
		if(self::$_instance == null || !self::$_instance instanceof self ) {
			self::$_instance = new self();
			self::$_instance->_num = rand(1,100);
		}
		return self::$_instance;
	}
	public function getNum(){
		echo "the number is ".$this->_num;
	}

}
//使用方式
$instance = Single::getInstance();
$instance->getNum();

$instance2 = Single::getInstance();
$instance2->getNum();

 上面的instance 和 instance2 的实例是一样的,num的值是一致的

实现单例模式的关键在于:

只能有一个获取实例的接口 getInstance, 禁止通过new 获取实例,禁止克隆,同时保存实例的那个静态变量为私有。而这些都是为了防止调用者,通过除了getIntance去获取实例, 这是在控制访问的唯一入口。

单例模式的优点在于:

1.提供实例的全局唯一访问点,确保只有一个对象被创建。

2.对唯一实例的受控访问 

3.缩小名空间    单例(Singleton)模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染名空间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值