注册树模式
在实例化对象的同时,将该对象注册到注册树中,之后不需要再重复实例化该对象,直接从注册树中取出即可。
RegisterTree.php(注册树类)
<?php
namespace core;
class RegisterTree
{
protected static $objects; // 存放注册对象
// 注册
public static function set($alias, $object)
{
self::$objects[$alias] = $object;
}
// 取实例化对象
public static function get($alias)
{
return self::$objects[$alias];
}
// 取消注册
public static function _unset($alias)
{
unset(self::$objects[$alias]);
}
}
Factory.php(工厂类)
<?php
namespace core;
class Factory
{
// 实例化Test类
static function createTest()
{
$test = Test::getInstance();
RegisterTree::set('test1', $test); // 将对象注册到注册树中
return $test;
}
}
调用
core\Factory::createTest(); // 调用工厂方法实例化,并注册到注册树中
$test = \core\RegisterTree::get('test1'); // 直接取实例化对象
$test->test1();