PHP設(shè)計(jì)模式(二十四)—注冊(cè)樹(shù)模式(Registry Pattern)

注冊(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í)例。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容