2018/04/24 PHP 设计模式之注册树模式
之前学习了工厂模式和单例模式,明白了他们的意义。
但是我们在之后的使用中会发现一个问题,在新建一个实例的时候还是需要调用一个单例或者工厂,之后还是造成了代码和耦合和不好处理。
下面开始说一下:
--
为什么使用注册树?
单例模式解决的了避免一个对象在多次创建时耗费的资源。只创建一个对象实例。
工厂模式是为了不直接通过 new 创建对象的方法。避免代码高度耦合。
在两种模式的存在下,我们更应该去统筹管理这些,不让其游荡在程序的各个角落。
于是在这里引入了注册树模式,不管你是怎样产生的对象,都会在 ‘树’ 上注册,在使用某个对象时候,直接从 ‘树’ 上拿下来就可以。
这和我们使用全局变量一样的方便实用。 而且注册树模式还为其他模式提供了一种非常好的想法。
--
实现注册树
明白了注册树的实现原理之后,代码可以其实可以有多种多样的,这里写一种集合单例和工厂模式挂在注册树上的
创建一个需要实例化的类
class test{}
创建单例模式
class Single
{
private function __construct() {}
public static function getInstance() {
static $_test;
if (empty($_test)) {
$_test = new test();
}
return $_test;
}
}
//工厂模式
class MyFactory
{
public static function factory() {
return Single::getInstance();
}
}
//注册树
class Register{
protected static $objects;
public static function set($alias,$object){
self::$objects[$alias]=$object;
}
public static function get($alias){
return self::$objects[$alias];
}
public static function _unset($alias){
unset(self::$objects[$alias]);
}
}
// 把需要的类注册到我们的注册表中
Register::set('test', MyFactory::factory());
// 获取注册的类
$test = Register::get('test');
这样我们就得到了 test() 的实例化类,虽然这样会比较麻烦,但是随着方法的增多,实例化的增大,就会发现他的好处和优势。
我们在这里给与了实例化一个很好的基类来实现 new。
--
感谢参考:

浙公网安备 33010602011771号