国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

模板方法模式(Template Method) - 最易懂的設計模式解析

2019-11-09 17:50:24
字體:
來源:轉載
供稿:網友


前言

今天我來全面總結一下Android開發中最常用的設計模式 - 模板方法模式。

其他設計模式介紹 1分鐘全面了解“設計模式” 單例模式(Singleton) - 最易懂的設計模式解析 簡單工廠模式(SimpleFactoryPattern)- 最易懂的設計模式解析 工廠方法模式(Factory Method)- 最易懂的設計模式解析 抽象工廠模式(Abstract Factory)- 最易懂的設計模式解析 策略模式(Strategy Pattern)- 最易懂的設計模式解析 適配器模式(Adapter Pattern)- 最易懂的設計模式解析 代理模式(PRoxy Pattern)- 最易懂的設計模式解析 模板方法模式(Template Method) - 最易懂的設計模式解析 建造者模式(Builder Pattern)- 最易懂的設計模式解析 外觀模式(Facade Pattern) - 最易懂的設計模式解析


目錄

模板方法模式.jpg


1. 介紹

1.1 定義

定義一個模板結構,將具體內容延遲到子類去實現。

1.2 主要作用

在不改變模板結構的前提下在子類中重新定義模板中的內容。

模板方法模式是基于”繼承“的;

1.3 解決的問題

提高代碼復用性 將相同部分的代碼放在抽象的父類中,而將不同的代碼放入不同的子類中實現了反向控制 通過一個父類調用其子類的操作,通過對子類的具體實現擴展不同的行為,實現了反向控制 & 符合“開閉原則”

2. 模式原理

2.1 UML類圖 & 組成

UML類圖

2.2 實例講解

接下來我用一個實例來對模板方法模式進行更深一步的介紹。 a. 實例概況

背景:小成希望學炒菜:手撕包菜 & 蒜蓉炒菜心沖突:兩道菜的炒菜步驟有的重復有的卻差異很大,記不住解決方案:利用代碼記錄下來

b. 使用步驟 步驟1: 創建抽象模板結構(Abstract Class):炒菜的步驟

public abstract class Abstract Class { //模板方法,用來控制炒菜的流程 (炒菜的流程是一樣的-復用)//申明為final,不希望子類覆蓋這個方法,防止更改流程的執行順序 final void cookProcess(){ //第一步:倒油 this.pourOil(); //第二步:熱油 this.HeatOil(); //第三步:倒蔬菜 this.pourVegetable(); //第四步:倒調味料 this.pourSauce(); //第五步:翻炒 this.fry(); } //定義結構里哪些方法是所有過程都是一樣的可復用的,哪些是需要子類進行實現的//第一步:倒油是一樣的,所以直接實現void pourOil(){ System.out.println("倒油"); } //第二步:熱油是一樣的,所以直接實現 void HeatOil(){ System.out.println("熱油"); } //第三步:倒蔬菜是不一樣的(一個下包菜,一個是下菜心)//所以聲明為抽象方法,具體由子類實現 abstract void pourVegetable();//第四步:倒調味料是不一樣的(一個下辣椒,一個是下蒜蓉)//所以聲明為抽象方法,具體由子類實現 abstract void pourSauce();//第五步:翻炒是一樣的,所以直接實現 void fry();{ System.out.println("炒啊炒啊炒到熟啊"); } }

步驟2: 創建具體模板(Concrete Class),即”手撕包菜“和”蒜蓉炒菜心“的具體步驟

//炒手撕包菜的類 public class ConcreteClass_BaoCai extend Abstract Class{ @Override public void pourVegetable(){ System.out.println(”下鍋的蔬菜是包菜“); } @Override public void pourSauce(){ System.out.println(”下鍋的醬料是辣椒“); } }//炒蒜蓉菜心的類 public class ConcreteClass_CaiXin extend Abstract Class{ @Override public void pourVegetable(){ System.out.println(”下鍋的蔬菜是菜心“); } @Override public void pourSauce(){ System.out.println(”下鍋的醬料是蒜蓉“); } }

步驟3: 客戶端調用-炒菜了

public class Template Method{ public static void main(String[] args){//炒 - 手撕包菜 ConcreteClass_BaoCai BaoCai = new ConcreteClass_BaoCai(); BaoCai.cookProcess();//炒 - 蒜蓉菜心 ConcreteClass_ CaiXin = new ConcreteClass_CaiXin(); CaiXin.cookProcess(); }}

結果輸出

倒油熱油下鍋的蔬菜是包菜下鍋的醬料是辣椒炒啊炒啊炒到熟倒油熱油下鍋的蔬菜是菜心下鍋的醬料是蒜蓉炒啊炒啊炒到熟

通過上述這個常見的生活例子,我相信你已經完全明白了模板方法模式的原理了!!


3. 優缺點

在全面解析完模板方法模式后,我來分析下其優缺點:

3.1 優點

提高代碼復用性 將相同部分的代碼放在抽象的父類中提高了拓展性 將不同的代碼放入不同的子類中,通過對子類的擴展增加新的行為實現了反向控制 通過一個父類調用其子類的操作,通過對子類的擴展增加新的行為,實現了反向控制 & 符合“開閉原則”

3.2 缺點

引入了抽象類,每一個不同的實現都需要一個子類來實現,導致類的個數增加,從而增加了系統實現的復雜度。


4. 應用場景

一次性實現一個算法的不變的部分,并將可變的行為留給子類來實現;各子類中公共的行為應被提取出來并集中到一個公共父類中以避免代碼重復;控制子類的擴展。

5. 總結

本文主要對模板方法模式進行了全面介紹,接下來將介紹其他設計模式,有興趣可以繼續關注Carson_Ho的安卓開發筆記!!!!


請幫頂或評論點贊!因為你的鼓勵是我寫作的最大動力!

相關文章閱讀 單例模式(Singleton) - 最易懂的設計模式解析 簡單工廠模式(SimpleFactoryPattern)- 最易懂的設計模式解析 工廠方法模式(Factory Method)- 最易懂的設計模式解析 抽象工廠模式(Abstract Factory)- 最易懂的設計模式解析 策略模式(Strategy Pattern)- 最易懂的設計模式解析 適配器模式(Adapter Pattern)- 最易懂的設計模式解析 代理模式(Proxy Pattern)- 最易懂的設計模式解析 模板方法模式(Template Method) - 最易懂的設計模式解析 建造者模式(Builder Pattern)- 最易懂的設計模式解析 外觀模式(Facade Pattern) - 最易懂的設計模式解析


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 襄垣县| 平昌县| 深水埗区| 揭东县| 江北区| 阳信县| 涞源县| 社旗县| 克什克腾旗| 垦利县| 高台县| 平泉县| 保定市| 唐河县| 昆山市| 陈巴尔虎旗| 晴隆县| 夏邑县| 都匀市| 泗洪县| 云南省| 牟定县| 大安市| 嘉荫县| 巴林右旗| 碌曲县| 阿克苏市| 晋宁县| 湘西| 离岛区| 牙克石市| 西峡县| 布尔津县| 阿合奇县| 赞皇县| 卢龙县| 剑阁县| 萨嘎县| 梅州市| 根河市| 岳池县|