
今天我來(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ì)模式解析

定義一個(gè)模板結(jié)構(gòu),將具體內(nèi)容延遲到子類(lèi)去實(shí)現(xiàn)。
在不改變模板結(jié)構(gòu)的前提下在子類(lèi)中重新定義模板中的內(nèi)容。
模板方法模式是基于”繼承“的;

接下來(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é)果輸出
倒油熱油下鍋的蔬菜是包菜下鍋的醬料是辣椒炒啊炒啊炒到熟倒油熱油下鍋的蔬菜是菜心下鍋的醬料是蒜蓉炒啊炒啊炒到熟在全面解析完模板方法模式后,我來(lái)分析下其優(yōu)缺點(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ù)雜度。
本文主要對(duì)模板方法模式進(jìn)行了全面介紹,接下來(lái)將介紹其他設(shè)計(jì)模式,有興趣可以繼續(xù)關(guān)注Carson_Ho的安卓開(kāi)發(fā)筆記!!!!
相關(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ì)模式解析
| 
 
 | 
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注