PHP設(shè)計(jì)模式之注冊(cè)樹模式

什么是注冊(cè)樹模式鸠按?

????????注冊(cè)樹模式當(dāng)然也叫注冊(cè)模式,注冊(cè)器模式馒吴。之所以我在這里矯情一下它的名稱,是因?yàn)槲腋杏X注冊(cè)樹這個(gè)名稱更容易讓人理解饮戳。像前兩篇一樣饭庞,我們這 篇依舊是從名字入手。注冊(cè)樹模式通過將對(duì)象實(shí)例注冊(cè)到一棵全局的對(duì)象樹上歹河,需要的時(shí)候從對(duì)象樹上采摘的模式設(shè)計(jì)方法秸歧。?? 這讓我想起了小時(shí)候買糖葫蘆衅澈,賣糖葫蘆的將糖葫蘆插在一個(gè)大的桿子上,人們買的時(shí)候就取下來经备。不同的是侵蒙,注冊(cè)樹模式摘下來還會(huì)有,能摘很多次蘑志,糖葫蘆摘一 次就沒了急但。。戒努。

書中自有顏如玉储玫,書中自有黃金屋

為什么要采用注冊(cè)樹模式萤皂?

????????單例模式解決的是如何在整個(gè)項(xiàng)目中創(chuàng)建唯一對(duì)象實(shí)例的問題裆熙,工廠模式解決的是如何不通過new建立實(shí)例對(duì)象的方法。 那么注冊(cè)樹模式想解決什么問題呢入录? 在考慮這個(gè)問題前僚稿,我們還是有必要考慮下前兩種模式目前面臨的局限。? 首先缅刽,單例模式創(chuàng)建唯一對(duì)象的過程本身還有一種判斷拷恨,即判斷對(duì)象是否存在谢肾。存在則返回對(duì)象,不存在則創(chuàng)建對(duì)象并返回冕杠。 每次創(chuàng)建實(shí)例對(duì)象都要存在這么一層判斷分预。 工廠模式更多考慮的是擴(kuò)展維護(hù)的問題。 總的來說笼痹,單例模式和工廠模式可以產(chǎn)生更加合理的對(duì)象。怎么方便調(diào)用這些對(duì)象呢晴裹?而且在項(xiàng)目內(nèi)如此建立的對(duì)象好像散兵游勇一樣救赐,不便統(tǒng)籌管理安排啊。因 而泌绣,注冊(cè)樹模式應(yīng)運(yùn)而生预厌。不管你是通過單例模式還是工廠模式還是二者結(jié)合生成的對(duì)象,都統(tǒng)統(tǒng)給我“插到”注冊(cè)樹上仿滔。我用某個(gè)對(duì)象的時(shí)候,直接從注冊(cè)樹上取 一下就好鞠绰。這和我們使用全局變量一樣的方便實(shí)用蜈膨。 而且注冊(cè)樹模式還為其他模式提供了一種非常好的想法。

書中自有顏如玉驴一,書中自有黃金屋

如何實(shí)現(xiàn)注冊(cè)樹肝断?

????????通過上述的描述驰凛,我們似乎很容易就找到了解決方法恰响。首先我們需要一個(gè)作為注冊(cè)樹的類胚宦,這毋庸置疑燕垃。所有的對(duì)象“插入”到注冊(cè)樹上利术。這個(gè)注冊(cè)樹應(yīng) 該由一個(gè)靜態(tài)變量來充當(dāng)印叁。而且這個(gè)注冊(cè)樹應(yīng)該是一個(gè)二維數(shù)組军掂。這個(gè)類應(yīng)該有一個(gè)插入對(duì)象實(shí)例的方法(set())蝗锥,當(dāng)讓相對(duì)應(yīng)的就應(yīng)該有一個(gè)撤銷對(duì)象實(shí)例 的方法(_unset())。當(dāng)然最重要的是還需要有一個(gè)讀取對(duì)象的方法(get())汇竭。擁有這些穴张,我們就可以愉快地完成注冊(cè)樹模式啦~~~

下面讓三種模式做個(gè)小小的結(jié)合皂甘。單純創(chuàng)建一個(gè)實(shí)例對(duì)象遠(yuǎn)遠(yuǎn)沒有這么復(fù)雜偿枕,但運(yùn)用于大型項(xiàng)目的話璧瞬,便利性便不言而喻了嗤锉。

書中自有顏如玉瘟忱,書中自有黃金屋

//創(chuàng)建單例

class Single

{??

????????public $hash;??

????????static protected $ins=null;??

????????final protected function __construct()

????????{????

????????????????$this->hash=rand(1,9999);??

????????}??

????????static public function getInstance()

????????{????

????????????????if (self::$ins instanceof self) {??????

????????????????????????return self::$ins;????

????????????????}????

????????????????self::$ins=new self();????

????????????????return self::$ins;??

????????}

}

//工廠模式

class RandFactory

{??

????????public static function factory()

????????{????

????????????????return Single::getInstance();??

????????}

}

//注冊(cè)樹

class Register

{??

????????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]);??

? ? ? ? }

}

Register::set('rand',RandFactory::factory());

$object=Register::get('rand');

print_r($object);

書中自有顏如玉酷誓,書中自有黃金屋

????????圖片與文章無關(guān)盐数,在閱讀技術(shù)文檔的時(shí)候欣賞一下美女也是一個(gè)不錯(cuò)的選擇,希望可以對(duì)你有幫助伞梯,如果有錯(cuò)誤的地方歡迎指正玫氢。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帚屉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子漾峡,更是在濱河造成了極大的恐慌攻旦,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件生逸,死亡現(xiàn)場離奇詭異牢屋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)槽袄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門烙无,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人遍尺,你說我怎么就攤上這事迂苛∪茫” “怎么了催跪?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵骑丸,是天一觀的道長通危。 經(jīng)常有香客問我,道長逆害,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上臭墨,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好红竭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布稀火。 她就那樣靜靜地躺著,像睡著了一般赡若。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粉渠,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天去件,我揣著相機(jī)與錄音,去河邊找鬼丈攒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播指攒,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铣墨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤搏讶,失蹤者是張志新(化名)和其女友劉穎媒惕,沒想到半個(gè)月后妒蔚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡月弛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年幌墓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片博杖。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖剃根,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惠险,我是刑警寧澤十兢,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布宵呛,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蝌焚。R本人自食惡果不足惜品腹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望红碑。 院中可真熱鬧,春花似錦、人聲如沸析珊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忠寻。三九已至惧浴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奕剃,已是汗流浹背衷旅。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纵朋,地道東北人柿顶。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像操软,于是被迫代替她去往敵國和親嘁锯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理聂薪,服務(wù)發(fā)現(xiàn)家乘,斷路器,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 更新:這篇文章已經(jīng)不推薦閱讀藏澳,大家想了解 PHP 的設(shè)計(jì)模式仁锯,建議閱讀這篇文章: https://laravel-...
    冰淤閱讀 11,486評(píng)論 2 11
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法翔悠,內(nèi)部類的語法业崖,繼承相關(guān)的語法,異常的語法凉驻,線程的語...
    子非魚_t_閱讀 31,625評(píng)論 18 399
  • 一 .三種常用基礎(chǔ)設(shè)計(jì)模式 1.工廠模式:使用工廠方法或者類生成對(duì)象腻要,而不是在代碼中直接使用new方法。2.單例模...
    xiaoangg閱讀 334評(píng)論 0 0
  • 最是清風(fēng)明月兩波愁 江水悠悠涝登,恐舴艋舟 一縷青衣雄家,碧玉簪頭 夢中的你,如此多愁 你的愁胀滚,如青絲萬縷繞枝頭 隨著風(fēng)兒...
    衡院書生閱讀 393評(píng)論 5 9