注册树模式

96
小龙123
2019.04.16 19:19* 字数 66

注册树模式是将一个类实例化之后,赋值给一个数组属性,取值的时候,如果这个类对应的属性存在,则不再进行实例化,直接取刚才赋的值即可

<?php

namespace Core\Lib;

/**
 * 注册树模式实现类的实例化
 * Class Register
 * @package Core\Lib
 */
class RegisterTree
{

    static $classes = [];

    /**
     * 设置一个类
     * @param $class
     * @return mixed
     */
    public static function set($class)
    {
        return self::$classes[$class] = new $class;
    }

    /**
     * 获取 $class 类对应的实例化
     * @param $class
     * @return mixed
     */
    public static function get($class)
    {
        if (array_key_exists($class, self::$classes)) {
            return self::$classes[$class];
        }
        return self::$classes[$class] = self::set($class);
    }

}

应用

 $config = \Core\Lib\RegisterTree::get(\Core\Lib\Config::class);
return $config->get($file, $key);
设计模式与架构
Web note ad 1