舉例講解Java設(shè)計(jì)模式編程中模板方法模式的運(yùn)用實(shí)例
模板方法模式定義為:
在一個(gè)方法中定義了一個(gè)算法的骨架或者步驟,而將一些步驟延遲到子類中去實(shí)現(xiàn)。模板方法使得子類可以在不改變算法結(jié)構(gòu)的情況下,重新定義算法中的某一些步驟。
模板方法在基類中定義了一個(gè)操作的流程順序,能夠保證該步驟按序進(jìn)行,有一些步驟的具體實(shí)現(xiàn)在基類中已經(jīng)聲明,而將一些變化的步驟的具體實(shí)現(xiàn)交給了子類去實(shí)現(xiàn),從而就達(dá)到了延遲一些步驟到子類中,模板方法一個(gè)最大的好處就是能夠設(shè)定一個(gè)業(yè)務(wù)流程能夠按照一定嚴(yán)格的順序執(zhí)行,控制了整個(gè)算法的執(zhí)行步驟。
這個(gè)方法將算法定義成一組步驟,其中凡是想讓子類進(jìn)行自定義實(shí)現(xiàn)的步驟,均定義為抽象方法。抽象基類的特點(diǎn)是,一般將模板方法設(shè)置為final,這樣防止子類覆蓋該算法的步驟,將一些相同的操作或步驟直接在基類中實(shí)現(xiàn),將一些變化的步驟設(shè)置為抽象由子類去完成。
Java實(shí)現(xiàn)示例
類圖:
/** * 業(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不可被重寫 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(); } }
打?。?/p>
模板方法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)的呢?下面就來看看這個(gè)問題2022-09-09淺談virtual、abstract方法和靜態(tài)方法、靜態(tài)變量理解
下面小編就為大家?guī)硪黄獪\談virtual、abstract方法和靜態(tài)方法、靜態(tài)變量理解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧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中過濾器與監(jiān)聽器的應(yīng)用
這篇文章主要介紹了JavaWeb中過濾器與監(jiān)聽器的應(yīng)用,過濾器能夠?qū)ζヅ涞恼?qǐng)求到達(dá)目標(biāo)之前或返回響應(yīng)之后增加一些處理代碼,監(jiān)聽器是一個(gè)接口內(nèi)容由我們實(shí)現(xiàn),會(huì)在特定時(shí)間被調(diào)用,感興趣想要詳細(xì)了解可以參考下文2023-05-05