@Chiang
2019-12-11T10:18:33.000000Z
字数 2088
阅读 572
设计模式
把对象的实例注册到全局的对象树上
<?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();