舉例講解Java設(shè)計(jì)模式編程中模板方法模式的運(yùn)用實(shí)例
模板方法模式定義為:
在一個(gè)方法中定義了一個(gè)算法的骨架或者步驟,而將一些步驟延遲到子類(lèi)中去實(shí)現(xiàn)。模板方法使得子類(lèi)可以在不改變算法結(jié)構(gòu)的情況下,重新定義算法中的某一些步驟。
模板方法在基類(lèi)中定義了一個(gè)操作的流程順序,能夠保證該步驟按序進(jìn)行,有一些步驟的具體實(shí)現(xiàn)在基類(lèi)中已經(jīng)聲明,而將一些變化的步驟的具體實(shí)現(xiàn)交給了子類(lèi)去實(shí)現(xiàn),從而就達(dá)到了延遲一些步驟到子類(lèi)中,模板方法一個(gè)最大的好處就是能夠設(shè)定一個(gè)業(yè)務(wù)流程能夠按照一定嚴(yán)格的順序執(zhí)行,控制了整個(gè)算法的執(zhí)行步驟。
這個(gè)方法將算法定義成一組步驟,其中凡是想讓子類(lèi)進(jìn)行自定義實(shí)現(xiàn)的步驟,均定義為抽象方法。抽象基類(lèi)的特點(diǎn)是,一般將模板方法設(shè)置為final,這樣防止子類(lèi)覆蓋該算法的步驟,將一些相同的操作或步驟直接在基類(lèi)中實(shí)現(xiàn),將一些變化的步驟設(shè)置為抽象由子類(lèi)去完成。
Java實(shí)現(xiàn)示例
類(lèi)圖:
/** * 業(yè)務(wù)流程模板,提供基本框架 */ public abstract class BaseTemplate { public abstract void part1(); public abstract void part2(); public abstract void part3(); //這里為了嚴(yán)格實(shí)驗(yàn)結(jié)果,使用final不可被重寫(xiě) public final void useTemplateMethod() { part1(); part2(); part3(); } }
/** * 模板實(shí)現(xiàn)方式1 */ public class TemplateMethod extends BaseTemplate { @Override public void part1() { System.out.println("模板方法1"); } @Override public void part2() { System.out.println("模板方法2"); } @Override public void part3() { System.out.println("模板方法3"); } }
/** * 模板實(shí)現(xiàn)方式2 * @author stone * */ public class TemplateMethod2 extends BaseTemplate { @Override public void part1() { System.out.println("模板方法11"); } @Override public void part2() { System.out.println("模板方法22"); } @Override public void part3() { System.out.println("模板方法33"); } }
public class Test { public static void main(String[] args) { BaseTemplate tm = new TemplateMethod(); tm.useTemplateMethod(); System.out.println(""); BaseTemplate tm2 = new TemplateMethod2(); tm2.useTemplateMethod(); } }
打印:
模板方法1 模板方法2 模板方法3 模板方法11 模板方法22 模板方法33
相關(guān)文章
Dubbo異步調(diào)用的實(shí)現(xiàn)介紹
dubbo默認(rèn)使用同步的方式調(diào)用。但在有些特殊的場(chǎng)景下,我們可能希望異步調(diào)用dubbo接口,從而避免不必要的等待時(shí)間,這時(shí)候我們就需要用到異步。那么dubbo的異步是如何實(shí)現(xiàn)的呢?下面就來(lái)看看這個(gè)問(wèn)題2022-09-09淺談virtual、abstract方法和靜態(tài)方法、靜態(tài)變量理解
下面小編就為大家?guī)?lái)一篇淺談virtual、abstract方法和靜態(tài)方法、靜態(tài)變量理解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02java利用Socket實(shí)現(xiàn)聊天室功能實(shí)例
這篇文章主要介紹了java利用Socket實(shí)現(xiàn)聊天室功能實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02java實(shí)現(xiàn)文件復(fù)制、剪切文件和刪除示例
這篇文章主要介紹了java實(shí)現(xiàn)文件復(fù)制、剪切文件和刪除示例,需要的朋友可以參考下2014-04-04深入理解JavaWeb中過(guò)濾器與監(jiān)聽(tīng)器的應(yīng)用
這篇文章主要介紹了JavaWeb中過(guò)濾器與監(jiān)聽(tīng)器的應(yīng)用,過(guò)濾器能夠?qū)ζヅ涞恼?qǐng)求到達(dá)目標(biāo)之前或返回響應(yīng)之后增加一些處理代碼,監(jiān)聽(tīng)器是一個(gè)接口內(nèi)容由我們實(shí)現(xiàn),會(huì)在特定時(shí)間被調(diào)用,感興趣想要詳細(xì)了解可以參考下文2023-05-05