设计模式之注册树模式

说完了单例模式和工厂模式,现在来说说注册模式,据我自己看完注册模式的第一印象就是全局调用,不过他的用途不止这一点,现在依然先声明一个Cat类并运用单例模式和工厂模式实现实例化
class Cat{
	private static $cat;
	private function __construct(){
		
	}

	static function getInstance(){
		if(empty(self::$cat)){
			self::$cat = new self;
			return self::$cat;
		}else{
			return self::$cat;
		}
	}
}
class Factory{
	static function createCat(){
		$cat = Cat::getInstance();
		return $cat;
	}
}
那么每次我们调用的createCat方法的时候,都会对是否实例化进行一次判断,在这种情况就可以用注册树模式优化处理如下
class Register{
	private static $obj;
	static function set($key, $value){
		self::$obj[$key] = $value;
	}

	static function get($key){
		return self::$obj[$key];
	}

	function _unset($key){
		unset(self::$obj[$key]);
	}
}
再对Factory类的createCat方法稍作修改
static function createCat(){
	$cat = Cat::getInstance();
	Register::set('cat', $cat);
	return $cat;
}

这样以后再需要cat实例的时候,只需要Register::get('cat')即可,方便实用。

我们再继续讨论全局调用的问题,譬如之前写的一个项目,在一个函数中获取到一个价格的值需要在另一个文件中调用,那么一个方法就是先在类中声明一个静态变量,然后在函数中赋值,还有一种就是用注册树来实现了,直接将值赋值在一个文件中再在另一个文件中取出即可,避免了在类中继续声明变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值