-
概念
注册树模式也叫注册模式或注册器模式,顾名思义,注册树就是把对象实例注册到一棵全局的对象树上,需要对象的时候就从树上取下来,就好比树上长的果子,需要的时候就摘一个下来,只是这个对象树果子是摘不完的。
-
作用
不管是单例模式还是工厂模式建立的对象,都没有得到很好的管理,用了注册树模式,就可以把创建出来的对象注册到全局树上,需要的时候取下来用,可以很好的管理创建的对象。
<?php
class DbMysql
{
public function conn()
{
echo 'mysql conn';
}
}
class DbSqlite
{
public function conn()
{
echo 'sqlite conn';
}
}
class MysqlFactory
{
public static function getIns()
{
return new DbMysql();
}
}
class SqliteFactory
{
public static function getIns()
{
return new DbSqlite();
}
}
//注册树实现存储对象(IOC控制反转思想)
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]);
}
}
//注册
RegisterTree::set('mysql', MysqlFactory::getIns());
RegisterTree::set('sqlite', SqliteFactory::getIns());
//客户端
// $mysql = RegisterTree::get('mysql');
// $mysql->conn();
// $sqlite = RegisterTree::get('sqlite');
// $sqlite->conn();
class Facade
{
public static $mysql;
public static $sqlite;
public function __construct()
{
self::$mysql = RegisterTree::get('mysql');
self::$sqlite = RegisterTree::get('sqlite');
}
}
new Facade();
Facade::$mysql->conn();
Facade::$sqlite->conn();