• 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。

    --

    感谢参考:

      php模式设计之 注册树模式

  • 相关阅读:
    Silverlight数据绑定之DataGrid
    演练:使用属性自定义 DataGrid 控件
    [开源下载] 【开源项目】EasySL for Silverlight 4
    Expression Blend实例中文教程(13)
    Expression Blend实例中文教程(12)
    Expression Blend实例中文教程(11)
    Expression Blend实例中文教程(10)
    Expression Blend实例中文教程(8)
    Expression Blend实例中文教程(7)
    Expression Blend实例中文教程(6)
  • 原文地址:https://www.cnblogs.com/25-lH/p/8931900.html
Copyright © 2020-2023  润新知