1. 模式定义
注册模式(Registry)也叫做注册树模式,注册器模式。注册模式为应用中经常使用的对象创建一个中央存储器来存放这些对象 —— 通常通过一个只包含静态方法的抽象类来实现(或者通过单例模式)。
2. UML类图
image.png3. 示例代码
Registry.php
<?php
namespace DesignPattern\Structural\Registry;
abstract class Registry
{
const LOGGER = 'logger';
protected static $storedValues = array();
public static function set($key, $value)
{
self::$storedValues[$key] = $value;
}
public static function get($key)
{
return self::$storedValues[$key];
}
// 通常会有一些方法来检查密钥是否已经注册,等等。 ...
}
单元测试 RegistryTest
<?php
namespace DesignPattern\Tests;
use DesignPattern\Structural\Registry\Registry;
use PHPUnit\Framework\TestCase;
class RegistryTest extends TestCase
{
public function testSetAndGetLogger()
{
Registry::set(Registry::LOGGER, new \StdClass());
$logger = Registry::get(Registry::LOGGER);
$this->assertInstanceOf('StdClass', $logger);
}
}
参考文档:https://laravelacademy.org/post/2850
教程源码:https://github.com/SylviaYuan1995/DesignPatternDemo
网友评论