PHP设计模式_注册树模式详解编程语言

通过注册树模式可以更加简单快捷的获取对象,在某个地方实例化了一个对象,可以将这个对象“保存”起来(放入可以全局使用的数组里),用的时候只需要提供 保存对象的时候 的那个标识即可,解决全局共享和交换对象,直接从该数组上获取即可。

为什么要采用注册树模式?

单例模式解决的是如何在整个项目中创建唯一对象实例的问题,工厂模式解决的是如何不通过new建立实例对象的方法。 那么注册树模式想解决什么问题呢? 在考虑这个问题前,我们还是有必要考虑下前两种模式目前面临的局限。 首先,单例模式创建唯一对象的过程本身还有一种判断,即判断对象是否存在。存在则返回对象,不存在则创建对象并返回。 每次创建实例对象都要存在这么一层判断。 工厂模式更多考虑的是扩展维护的问题。 总的来说,单例模式和工厂模式可以产生更加合理的对象。怎么方便调用这些对象呢?而且在项目内如此建立的对象好像散兵游勇一样,不便统筹管理安排啊。因而,注册树模式应运而生。不管你是通过单例模式还是工厂模式还是二者结合生成的对象,都统统给我“插到”注册树上。

<?php 
 
//单例类 
class DataBase{ 
    private $ins; 
 
    static public function getInstance(){ 
        if (self::$ins instanceof self) { 
            return self::$ins; 
        } 
        self::$ins=new self(); 
        return self::$ins; 
    }  
} 
 
//工厂类 
class Factory { 
    static function createDatabase () { 
        $db = DataBase::getInstance(); 
        Register::set('testDb', $db); 
        return $db; 
    } 
} 
 
 
//注册器类 
class Register{ 
    protected static  $objects; 
        function set($alias, $object)//将对象注册到全局的树上 
        { 
            self::$objects[$alias] = $object;//将对象放到树上 
        } 
     static function get($name){ 
        return self::$objects[$name];//获取某个注册到树上的对象 
    } 
    function _unset($alias) 
  { 
        unset(self::$objects[$alias]);//移除某个注册到树上的对象。 
    } 
} 
$db = Register::get('testDb'); 
var_dump($db);

三种模式设计的结合使用,各种模式设计本身就会相辅相成。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/17155.html

(0)
上一篇 2021年7月19日 19:55
下一篇 2021年7月19日 19:55

相关推荐

发表回复

登录后才能评论