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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

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

2019-11-09 16:50:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友


前言

今天我來(lái)全面總結(jié)一下Android開(kāi)發(fā)中最常用的設(shè)計(jì)模式 - 模板方法模式。

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


目錄

模板方法模式.jpg


1. 介紹

1.1 定義

定義一個(gè)模板結(jié)構(gòu),將具體內(nèi)容延遲到子類(lèi)去實(shí)現(xiàn)。

1.2 主要作用

在不改變模板結(jié)構(gòu)的前提下在子類(lèi)中重新定義模板中的內(nèi)容。

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

1.3 解決的問(wèn)題

提高代碼復(fù)用性 將相同部分的代碼放在抽象的父類(lèi)中,而將不同的代碼放入不同的子類(lèi)中實(shí)現(xiàn)了反向控制 通過(guò)一個(gè)父類(lèi)調(diào)用其子類(lèi)的操作,通過(guò)對(duì)子類(lèi)的具體實(shí)現(xiàn)擴(kuò)展不同的行為,實(shí)現(xiàn)了反向控制 & 符合“開(kāi)閉原則”

2. 模式原理

2.1 UML類(lèi)圖 & 組成

UML類(lèi)圖

2.2 實(shí)例講解

接下來(lái)我用一個(gè)實(shí)例來(lái)對(duì)模板方法模式進(jìn)行更深一步的介紹。 a. 實(shí)例概況

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

b. 使用步驟 步驟1: 創(chuàng)建抽象模板結(jié)構(gòu)(Abstract Class):炒菜的步驟

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

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

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

步驟3: 客戶(hù)端調(diào)用-炒菜了

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(); }}

結(jié)果輸出

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

通過(guò)上述這個(gè)常見(jiàn)的生活例子,我相信你已經(jīng)完全明白了模板方法模式的原理了!!


3. 優(yōu)缺點(diǎn)

在全面解析完模板方法模式后,我來(lái)分析下其優(yōu)缺點(diǎn):

3.1 優(yōu)點(diǎn)

提高代碼復(fù)用性 將相同部分的代碼放在抽象的父類(lèi)中提高了拓展性 將不同的代碼放入不同的子類(lèi)中,通過(guò)對(duì)子類(lèi)的擴(kuò)展增加新的行為實(shí)現(xiàn)了反向控制 通過(guò)一個(gè)父類(lèi)調(diào)用其子類(lèi)的操作,通過(guò)對(duì)子類(lèi)的擴(kuò)展增加新的行為,實(shí)現(xiàn)了反向控制 & 符合“開(kāi)閉原則”

3.2 缺點(diǎn)

引入了抽象類(lèi),每一個(gè)不同的實(shí)現(xiàn)都需要一個(gè)子類(lèi)來(lái)實(shí)現(xiàn),導(dǎo)致類(lèi)的個(gè)數(shù)增加,從而增加了系統(tǒng)實(shí)現(xiàn)的復(fù)雜度。


4. 應(yīng)用場(chǎng)景

一次性實(shí)現(xiàn)一個(gè)算法的不變的部分,并將可變的行為留給子類(lèi)來(lái)實(shí)現(xiàn);各子類(lèi)中公共的行為應(yīng)被提取出來(lái)并集中到一個(gè)公共父類(lèi)中以避免代碼重復(fù);控制子類(lèi)的擴(kuò)展。

5. 總結(jié)

本文主要對(duì)模板方法模式進(jìn)行了全面介紹,接下來(lái)將介紹其他設(shè)計(jì)模式,有興趣可以繼續(xù)關(guān)注Carson_Ho的安卓開(kāi)發(fā)筆記!!!!


請(qǐng)幫頂或評(píng)論點(diǎn)贊!因?yàn)槟愕墓膭?lì)是我寫(xiě)作的最大動(dòng)力!

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


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 鹿泉市| 镇原县| 定兴县| 满洲里市| 凤庆县| 武穴市| 铁力市| 新昌县| 郎溪县| 韶山市| 陈巴尔虎旗| 广灵县| 阜阳市| 玉龙| 旬邑县| 石泉县| 乌拉特后旗| 泰宁县| 沂水县| 广南县| 盘山县| 岑巩县| 岳普湖县| 巴林右旗| 枣庄市| 汉寿县| 江孜县| 孝昌县| 中牟县| 曲麻莱县| 五原县| 婺源县| 阿坝县| 巧家县| 辽阳市| 鄂伦春自治旗| 霍州市| 钟山县| 郯城县| 延寿县| 水城县|