摘要:簡介注冊樹模式又稱注冊模式或注冊器模式。注冊樹模式通過將對象實例注冊到一棵全局的對象樹上,需要的時候從對象樹上采摘的模式設(shè)計方法。使用了注冊樹模式后,對于實例,我們能夠更好地統(tǒng)籌管理安排,就像使用全局變量一樣的方便實用。
簡介
注冊樹模式又稱注冊模式或注冊器模式。注冊樹模式通過將對象實例注冊到一棵全局的對象樹上,需要的時候從對象樹上采摘的模式設(shè)計方法。和果樹不同的是,果子只能采摘一次,而注冊樹上的實例卻可以無數(shù)次獲取。
使用了注冊樹模式后,對于實例,我們能夠更好地統(tǒng)籌管理安排,就像使用全局變量一樣的方便實用。
實現(xiàn)下面我以代碼的形式向大家演示一下,詳解請參照代碼注釋
代碼:
"; } } /** * 銷毀注冊樹中的實例 * * @param $alias 對象別名-注冊樹中的名稱 */ public static function _unset($alias) { unset(self::$objects[$alias]); } } /** * Class demo 演示類 */ class demo { /* * 測試方法 */ public function test() { echo "看這里看這里
"; } } // 實例化測試類,獲取對象實例 $demo = new demo(); // 注冊到樹上 $tree = Register::set("de", $demo); // 取出來 $de_true = Register::get("de"); // 測試 $de_true->test(); // 銷毀 Register::_unset("de"); // 嘗試再次取出來 $de_true_two = Register::get("de"); // 嘗試再次測試 $de_true_two->test();
運(yùn)行結(jié)果:
// 第一次成功運(yùn)行 看這里看這里 // 第二次銷毀后找不到對象實例 您要找的對象實例不存在哦 // 第二次銷毀后找不到對象實例,故無法調(diào)用對象方法,報錯 Fatal error: Call to a member function test() on a non-object in E:phpStudyWWW est est.php on line 77擴(kuò)展
上面已經(jīng)通過實例向大家展示了如何構(gòu)建注冊樹模式,相信大家應(yīng)該都明白了,那么下面我們就將注冊樹模式和工廠模式與單例模式結(jié)合起來,看看如何實現(xiàn)他們的代碼
代碼:
"; } } /** * 銷毀注冊樹中的實例 * * @param $alias 對象別名-注冊樹中的名稱 */ public static function _unset($alias) { unset(self::$objects[$alias]); } } /** * Class demo 單例演示類 */ class singleDemo { // 存放實例屬性 public static $_instance; public $content; // 私有化構(gòu)造函數(shù),防止外部new private function __construct($content) { $this->content = $content; } // 獲取實例 public static function getInstance($content) { // 判斷實例是否存在 if (!(self::$_instance instanceof self)) { self::$_instance = new self($content); } return self::$_instance; } // 私有化克隆方法,防止克隆 private function __clone() { } // 測試方法 public function test() { echo $this->content."
"; } } /** * Class factory 工廠類 */ class Factory { // 生產(chǎn) public static function create($content) { // 返回對象 return singleDemo::getInstance($content); } } // 加入注冊樹 Register::set("si",Factory::create("我是content參數(shù)內(nèi)容,哈哈")); // 取出對象實例 $object = Register::get("si"); // 執(zhí)行測試方法 $object->test(); // 打印對象 var_dump($object);
運(yùn)行結(jié)果:
我是content參數(shù)內(nèi)容,哈哈 object(singleDemo)#1 (1) { ["content"]=> string(34) "我是content參數(shù)內(nèi)容,哈哈" }地址
關(guān)于工廠模式和單例模式,之前的文章我也說過,如果有興趣,可以從以下地址前往:
PHP設(shè)計模式之工廠模式:https://segmentfault.com/a/11...
PHP設(shè)計模式之單例模式:https://segmentfault.com/a/11...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/22034.html
摘要:的設(shè)計模式有很多種,本文取最簡單的三種模式工廠模式單例模式和注冊樹模式進(jìn)行簡單的講解。文件創(chuàng)建完后,咱們回到單元測試文件文件再執(zhí)行一下單元測試命令發(fā)現(xiàn),也能返回成功,這樣的話我們就能很方便的修改任何驅(qū)動了。 php 設(shè)計模式之工廠模式、單例模式、注冊樹模式 在軟件工程中,創(chuàng)建型設(shè)計模式承擔(dān)著對象創(chuàng)建的職責(zé),嘗試創(chuàng)建適合程序上下文的對象,對象創(chuàng)建設(shè)計模式的產(chǎn)生是由于軟件工程設(shè)計的問題,具...
摘要:一工廠模式工廠方法或類中生成對象,而不是在代碼中直接優(yōu)點將某個常用類,多個地方需要時,使用工廠模式,方便類的擴(kuò)展與維護(hù)文件目錄正常實例化類獲取單例模式的類將實例化后的類注冊到全局注冊樹中外部調(diào)用得到對象獲取全局注冊樹中的對象卸載全局注冊樹中 一、工廠模式:工廠方法或類中生成對象,而不是在代碼中直接 new 優(yōu)點:將某個常用類,多個地方需要 new 時,使用工廠模式,方便類的擴(kuò)展與維護(hù)文...
摘要:我們今天也來做一個萬能遙控器設(shè)計模式適配器模式將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。今天要介紹的仍然是創(chuàng)建型設(shè)計模式的一種建造者模式。設(shè)計模式的理論知識固然重要,但 計算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進(jìn)行操作,第二類是返回一個容器接口對象,上節(jié)我們介紹了...
摘要:我們今天也來做一個萬能遙控器設(shè)計模式適配器模式將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。今天要介紹的仍然是創(chuàng)建型設(shè)計模式的一種建造者模式。設(shè)計模式的理論知識固然重要,但 計算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進(jìn)行操作,第二類是返回一個容器接口對象,上節(jié)我們介紹了...
摘要:雖然有了十全的計劃,但如何高效率去記住上面那么多東西是一個大問題,看看我是怎么做的。 前言 前一篇文章講述了我在三月份毫無準(zhǔn)備就去面試的后果,一開始心態(tài)真的爆炸,但是又不服氣,一想到每次回來后家人朋友問我面試結(jié)果的期待臉,越覺得必須付出的行動來證明自己了。 面經(jīng)傳送門:一個1年工作經(jīng)驗的PHP程序員是如何被面試官虐的? 下面是我花費兩個星期做的準(zhǔn)備,主要分三部分: 有計劃——計劃好...
閱讀 3921·2021-11-17 09:33
閱讀 3283·2021-10-08 10:05
閱讀 3111·2021-09-22 15:36
閱讀 1140·2021-09-06 15:02
閱讀 2772·2019-08-29 12:45
閱讀 1590·2019-08-26 13:40
閱讀 3399·2019-08-26 13:37
閱讀 420·2019-08-26 13:37