注冊(cè)樹(shù)模式(Registry Pattern ):注冊(cè)樹(shù)模式為應(yīng)用中經(jīng)常使用的對(duì)象創(chuàng)建一個(gè)中央存儲(chǔ)器來(lái)存放這些對(duì)象 —— 通常通過(guò)一個(gè)只包含靜態(tài)方法的抽象類來(lái)實(shí)現(xiàn)(或者通過(guò)單例模式)。也叫做注冊(cè)器模式
(一)為什么需要注冊(cè)樹(shù)模式
解決常用對(duì)象的存放問(wèn)題,實(shí)現(xiàn)類似于全局變量的功能。
(二)注冊(cè)樹(shù)模式UML圖
暫無(wú),跪求提供
(三)簡(jiǎn)單實(shí)例
<?php
//User類用于測(cè)試
class User{}
//注冊(cè)樹(shù)類
class Registry
{
protected static $objects; //用于存放實(shí)例
//存入實(shí)例方法
static public function set($key, $object)
{
self::$objects[$key] = $object;
}
//獲取實(shí)例方法
static public function get($key)
{
if (!isset(self::$objects[$key]))
{
return false;
}
return self::$objects[$key];
}
//刪除實(shí)例方法
static public function _unset($key)
{
unset(self::$objects[$key]);
}
}
$user = new User;
//存入實(shí)例
Registry::set('User',$user);
//查看實(shí)例
var_dump(Registry::get('User'));
//刪除實(shí)例
Registry::_unset('User');
//再次查看實(shí)例
var_dump(Registry::get('User'));
注冊(cè)樹(shù)經(jīng)常與單例模式一起使用,先查看注冊(cè)樹(shù)上是否有該實(shí)例,有就直接使用,沒(méi)有就生成一個(gè)實(shí)例,并掛到樹(shù)上。有些時(shí)候我們還可以這樣做,讓get方法如果get不到實(shí)例的時(shí)候就自動(dòng)new一個(gè)存放起來(lái),這樣我們使用時(shí)就不用管有沒(méi)有存放過(guò)這個(gè)實(shí)例,反正沒(méi)有的話get方法也會(huì)幫我們存放。
//獲取實(shí)例方法
static public function get($key)
{
if (!isset(self::$objects[$key]))
{
self::$objects[$key] = new $key;
}
return self::$objects[$key];
}
當(dāng)然使用這種方式的話,查看實(shí)例是否存在,就不能使用get方法了。因?yàn)檎{(diào)用get方法以后,不存在也會(huì)生成一個(gè)實(shí)例。