• 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);

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

  • 相关阅读:
    Unix环境编程常用头文件
    《APUE》读书笔记—第十章信号(上)
    Unix网络编程API
    管道和FIFO
    《APUE》读书笔记—第九章进程关系
    开通博客园
    《APUE》读书笔记—第五章标准I/O库
    《APUE》读书笔记—第十章信号(中)
    《APUE》读书笔记—第三章文件I/O
    《APUE》读书笔记—第七章进程环境
  • 原文地址:https://www.cnblogs.com/wt645631686/p/8398524.html
Copyright © 2020-2023  润新知