什么是注册树模式
注册树模式,也叫注册器模式, 注册模式。
注册模式,解决全局共享和交换对象。已经创建好的对象,挂在某个全局可以使用的数组上, 在需要使用的时候,直接从该数组上获取即可。将对象注册到全局的树上,任何地方都可以直接访问。(有点类似单例模式)
为什么要采用注册树模式
单例模式解决的是如何在整个项目中创建唯一对象实例的问题, 工厂方法模式解决的是如何不通过new建立实例对象的方法.
那为什么还需要注册树模式呢?
首先, 单例模式创建以为对象的过程本身还有一种判断, 即判断对象是否存在. 存在则返回对象, 否则创建并返回对象.
工厂方法模式更多考虑的是扩展维护的问题.
总的来说, 单例模式和工厂方法模式可以产生更加合理的对象.
那怎么方便调用这些对象呢? 在项目内部如此建立的对象都是各自分散的, 不方便统筹管理, 注册树模式由此而生. 不管是通过单例模式还是工厂方法模式或者二者结合生成的对象, 都统统给添加到树上. 需要使用某个对象的时候, 直接从树上取一下就好. 这与管局变量$_GLOBALS
一样的方便.
如何实现?
只要实现get
, set
, _unset
三个方法即可.
class Register {
protected static $objects;
//将对象注册到全局的树上
public static function set($alias, $object){
self::$objects[$alias] = $object;//将对象放到树上
}
//获取某个注册到树上的对象
public static function get($name){
return self::$objects[$name];
}
//移除某个注册到树上的对象
public static function _unset($alias){
//注意这个函数名不能使用php自带的`unset`
unset(self::$objects[$alias]);
}
}
$animal = new Animal('dog');
//注册
Register::set('dog', $animal);
//获取
$dog = Register::get('dog');
//移除
Register::_unset('dog');