什么是注册模式
注册模式(Registry)也叫做注册树模式,注册器模式。注册模式为应用中经常使用的对象创建一个中央存储器来存放这些对象 —— 通常通过一个只包含静态方法的抽象类来实现(或者通过单例模式)。
应用场景
可以把一些常用的对象注册到注册树上,可重复利用。
PHP 代码实现
<?php
/**
* 注册树类,继承SPL标准库--ArrayObject类
* Class Registry
*/
class Registry extends ArrayObject
{
/**
* Registry实例
* @var object
*/
private static $_instance = null;
/**
* 单例模式,取得Registry实例
* @return object
*/
public static function getInstance()
{
if(is_null(self::$_instance) || !self::$_instance instanceof self){
self::$_instance = new self();
}
return self::$_instance;
}
/**
* 注册对象到注册树中
* @param string $name 索引
* @param mixed $value 数据
* @return void
*/
public static function set($name, $value)
{
self::getInstance()->offsetSet($name, $value);
}
/**
* 取得注册树中某个对象
* @param string $name 索引
* @return mixed
*/
public static function get($name)
{
$instance = self::getInstance();
if (!$instance->offsetExists($name)) {
return null;
}
return $instance->offsetGet($name);
}
/**
* 检查一个对象是否存在注册树中
* @param string $name 索引
* @return boolean
*/
public static function isRegistered($name)
{
return self::getInstance()->offsetExists($name);
}
/**
* 删除注册树中的指定对象
* @param string $name 索引
* @return void
*/
public static function remove($name)
{
self::getInstance()->offsetUnset($name);
}
}
//=======================注册器测试===============================
class Test
{
function hello()
{
echo "hello world";
return;
}
}
$test = new Test();
//注册对象
Registry::set('testClass',$test);
//取出对象
$test = Registry::get('testClass');
//调用对象方法
$test->hello();
//结果
//hello world