常用设计模式之PHP实现: 注册树模式

原创
2021/06/02 20:34
阅读数 76

什么是注册树模式

注册树模式,也叫注册器模式, 注册模式。

注册模式,解决全局共享和交换对象。已经创建好的对象,挂在某个全局可以使用的数组上, 在需要使用的时候,直接从该数组上获取即可。将对象注册到全局的树上,任何地方都可以直接访问。(有点类似单例模式)

为什么要采用注册树模式

单例模式解决的是如何在整个项目中创建唯一对象实例的问题, 工厂方法模式解决的是如何不通过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');
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部