@Chiang
2019-12-11T10:18:33.000000Z
字数 2088
阅读 705
设计模式
把对象的实例注册到全局的对象树上
<?php/*** 注册树模式** @author Luffy (lufei@swoole.com)* @date 2019/9/20* @copyright Swoole, Inc.* @package sy-records/design-patterns*/namespace Luffy\DesignPatterns\RegistryTree;/*** Class RegistryTree* @package Luffy\DesignPatterns\RegistryTree*/class RegistryTree{private static $objects;public static function set($alias, $object){self::$objects[$alias] = $object;}public static function get($alias){if (!isset(self::$objects[$alias])) {return false;}return self::$objects[$alias];}public static function _unset($alias){if(isset(self::$objects[$alias])){unset(self::$objects[$alias]);return true;}return false;}}
<?php/*** 注册树测试文件** @author Luffy (lufei@swoole.com)* @date 2019/9/20* @copyright Swoole, Inc.* @package sy-records/design-patterns*/include __DIR__ . '/../vendor/autoload.php';// 注册树use Luffy\DesignPatterns\RegistryTree\RegistryTree;class Demo{public function index(){echo "红红火火恍恍惚惚\n";}}$demo = new Demo();var_dump($demo);$demo->index();// 添加进对象树中RegistryTree::set("demo", $demo);// 获取对象$demo2 = RegistryTree::get("demo");var_dump($demo2);$demo2->index();// 删除对象RegistryTree::_unset("demo");// 再次获取$demo_obj = RegistryTree::get("demo");var_dump($demo_obj);$demo_obj->index();
<?php/*** 注册树、单例、工厂一起使用** @author Luffy (lufei@swoole.com)* @date 2019/9/20* @copyright Swoole, Inc.* @package sy-records/design-patterns*/include __DIR__ . '/../vendor/autoload.php';// 注册树use Luffy\DesignPatterns\RegistryTree\RegistryTree;/*** 单例* Class SingletonDemo*/class SingletonDemo{/*** @var*/private static $instance;private $content;public static function getInstance(){if (!self::$instance instanceof self) {static::$instance = new self();}return static::$instance;}/*** SingletonDemo constructor.*/private function __construct(){$this->content = rand(1, 9999);}private function __clone(){}private function __wakeup(){// TODO: Implement __wakeup() method.}public function test(){return $this->content;}}/*** 工厂* Class Factory*/class Factory{public static function create(){// 返回对象return SingletonDemo::getInstance();}}RegistryTree::set("singleton", Factory::create());$obj = RegistryTree::get("singleton");var_dump($obj);echo $obj->test();
