整理一下自己的學習Aaron Saray 寫的PHP設計模式一些demo和自己的理解。大佬看完如果發現鄙人理解有誤請立即指出,感謝拍磚,跪求鞭打
/** * Decorator 裝飾器模式 * ------------------------------------- * ** 來自說明 ** * * 如果已有對象的部分內容或功能性發生改變,但是不需要修改原始的結構 * * 剛開始樓主覺得這個他么怎么這么像 【 適配器模式 】 * 然后又把適配器模式的理論復制了過來給各位觀眾老爺看 * * |-> 適配器模式: * 通過適配器模式能夠使用新的代碼和功能性來幫助更新原有的系統。 * * 前面演練過了,適配器還是需要繼承原對象來實現,但是我們最開始學習面向對象編程時候 * 如果對象開始要求啟用過多的子類,那么相應的代碼就會犧牲編程人員的理解力和可維護性 * 通常,我們會竭力保證用于一個對象的父-子類關系不超過3個 * * * ===================================== * ** 應用場景 ** * * 迭代新的應用需求 * * ------------------------------------- * * @version ${Id}$ * @author Shaowei Pu <54268491@qq.com> */
// 現在你是一個農場飼養員,主要負責養豬方面工作 /** * 飼養類 */ class feeding{ /** * [$mess_tin 飯盒] * @var array */ public $mess_tin = []; /** * [feed 喂食物] * @author Shaowei Pu* @CreateTime 2017-02-23T19:47:18+0800 * @param [type] $food [description] * @return [type] [description] */ public function feed( $food ){ $this->mess_tin[] = $food; } /** * [getHow 吃了哪些東西] * @author Shaowei Pu * @CreateTime 2017-02-23T19:51:41+0800 * @return [type] [description] */ public function getHow(){ return $this->mess_tin; } } // 以前你通過這樣的方式可以喂豬 $you = new feeding; // 然后老板給了這些食物 $bread = [ "apple", "tangerine", "banana", ]; foreach ($bread as $key => $value) { $you->feed($value); } // 看看吃了些啥 var_dump( $you->getHow() ); /* +---------------------------------------------------------------------- |array (size=3) | 0 => string "apple" (length=5) | 1 => string "tangerine" (length=9) | 2 => string "banana" (length=6) +---------------------------------------------------------------------- */ // 但是有天高級飼養說這喂的這些食物都是小寫的 這不行,給豬必須要大寫的 // 然后你看了下飼養類,聽隔壁兄弟這個類不僅僅用在豬身上 // 也有養羊事業部,羊牛事業部,同樣用的這個類 // 你不能瞎幾把亂改 // 學了適配器的你馬上想到了 使用【適配器模式】可以解決問題 // 但是立馬老大就說了不準亂繼承。一個父類最多繼承 3 個子類 // 于是聰明的你想到了這樣一個方法 /** * 養豬事業部專用 */ class feddingDecorator{ /** * [$_feeding 基類容器] * @var array */ private $_feeding = []; /** * [__construct 基類入變量] * @author Shaowei Pu * @CreateTime 2017-02-23T20:00:58+0800 * @param feeding $feeding [description] */ public function __construct( feeding $feeding ) { $this->_feeding = $feeding; } /** * [expertFeed 高級食物轉換器] * @author Shaowei Pu * @CreateTime 2017-02-23T20:04:42+0800 * @return [type] [description] */ public function expertFeed() { array_walk($this->_feeding->mess_tin, function( &$value ){ $value = strtoupper( $value ); }); } } // 然后這樣,前期您還是放心喂 $me = new feeding; foreach ($bread as $key => $value) { $me->feed($value); } // 然后你喂完了就開始用的養豬專業部使用的高科技了 $stm = new feddingDecorator( $me ); $stm->expertFeed(); // 看看吃了啥 var_dump($me-> getHow()); /* +---------------------------------------------------------------------- |array (size=3) | 0 => string "APPLE" (length=5) | 1 => string "TANGERINE" (length=9) | 2 => string "BANANA" (length=6) +---------------------------------------------------------------------- */ // 掌聲經久不息
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22410.html
整理一下自己的學習Aaron Saray 寫的PHP設計模式一些demo和自己的理解。大佬看完如果發現鄙人理解有誤請立即指出,感謝拍磚,跪求鞭打 /** * Decorator 裝飾器模式 * ------------------------------------- * ** 來自說明 ** * * 如果已有對象的部分內容或功能性發生改變,但是不需要修改原始的結構 * * 剛開...
摘要:概念裝飾器模式允許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現有的類的一個包裝。這種模式創建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。 概念 裝飾器模式(Decorator Pattern)允許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現有的類的...
摘要:通常有兩種方式可以實現給一個類或對象增加行為繼承機制,使用繼承機制是給現有類添加功能的一種有效途徑,通過繼承一個現有類可以使得子類在擁有自身方法的同時還擁有父類的方法。 裝飾模式 (Decorator Pattern) 裝飾模式能夠實現動態的為對象添加功能,是從一個對象外部來給對象添加功能。通常有兩種方式可以實現給一個類或對象增加行為: 繼承機制,使用繼承機制是給現有類添加功能的一種...
閱讀 2840·2023-04-26 02:23
閱讀 1586·2021-11-11 16:55
閱讀 3152·2021-10-19 11:47
閱讀 3363·2021-09-22 15:15
閱讀 1980·2019-08-30 15:55
閱讀 1039·2019-08-29 15:43
閱讀 1296·2019-08-29 13:16
閱讀 2198·2019-08-29 12:38