Java行為型設(shè)計(jì)模式之模板方法詳解
模板方法模式
模板方法模式屬于行為型設(shè)計(jì)模式。它是指定義一個(gè)操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。
模板方法模式實(shí)際上是封裝了一個(gè)固定流程,該流程由幾個(gè)步驟組成,具體步驟可以由子類進(jìn)行不同實(shí)現(xiàn),從而讓固定的流程產(chǎn)生不同的結(jié)果。
模板方法模式的本質(zhì)是抽象封裝流程,具體進(jìn)行實(shí)現(xiàn)。
應(yīng)用場(chǎng)景
當(dāng)完成一個(gè)操作具有固定的流程時(shí),由抽象固定流程步驟,具體步驟交給子類進(jìn)行具體實(shí)現(xiàn)(固定的流程,不同的實(shí)現(xiàn))。
1.實(shí)現(xiàn)一個(gè)算法的不變的部分(子類共有方法),將可變的行為留給子類來實(shí)現(xiàn)。
2.各子類中公共的行為被提取出來并集中到一個(gè)公共的父類中,以而避免代碼重復(fù)。
比如:入職資料的填寫,通常會(huì)有一系列的流程,只需要按照流程規(guī)則一步一步做即可。是目標(biāo)方法模式的體現(xiàn)。
主要角色
1.抽象模板(AbstractClass)
抽象模板類,定義了一套算法框架/流程。
2.具體實(shí)現(xiàn)(ConcreteClass)
具體實(shí)現(xiàn)類,對(duì)算法框架/流程的某些步進(jìn)行了實(shí)現(xiàn)。
優(yōu)缺點(diǎn)
1.將相同處理邏輯代碼放到抽象父類中,提高代碼的復(fù)用性。
2.將不同代碼放到不同子類中,通過對(duì)子類的擴(kuò)展增加新的行為,提高代碼的擴(kuò)展性。
3.把不變的行為寫在父類上,去除子類的重復(fù)代碼,提供了一個(gè)很好的代碼復(fù)用平臺(tái),符合開閉原則
缺點(diǎn)
1.類數(shù)目的增加,每個(gè)抽象類都需要一個(gè)子類來實(shí)現(xiàn),這樣導(dǎo)致類的個(gè)數(shù)增加。
2.類數(shù)量的增加,間接地增加了系統(tǒng)實(shí)現(xiàn)的復(fù)雜度。
3.繼承關(guān)系自身缺點(diǎn),如果父類添加新的抽象方法,所有子類都要改一遍。
模板方法模式的基本使用
創(chuàng)建抽象模板角色
public abstract class AbstractClass { protected void step1() { System.out.println("AbstractClass:step1--->準(zhǔn)備入職材料"); } protected void step2() { System.out.println("AbstractClass:step2--->填寫入職登記信息"); } protected void step3() { System.out.println("AbstractClass:step3--->簽訂勞動(dòng)合同"); } protected void step4() { System.out.println("AbstractClass:step4--->辦理工牌,安排工位"); } public final void templateMehthod() { this.step1(); this.step2(); this.step3(); this.step4(); } }
創(chuàng)建具體實(shí)現(xiàn)
public class ConcreteClassA extends AbstractClass { @Override protected void step1() { System.out.println("ConcreateClassA:step1--->普通員工 準(zhǔn)備入職材料"); } }
public class ConcreteClassB extends AbstractClass { @Override protected void step1() { System.out.println("ConcreateClassA:step1--->關(guān)系戶 準(zhǔn)備入職材料"); } }
客戶端調(diào)用
public static void main(String[] args) { System.out.println("--------------普通人入職------------"); AbstractClass abcA = new ConcreteClassA(); abcA.templateMehthod(); System.out.println("--------------關(guān)系戶入職------------"); AbstractClass abcB = new ConcreteClassB(); abcB.step3(); abcB.step4(); }
--------------普通人入職------------
ConcreateClassA:step1--->普通員工 準(zhǔn)備入職材料
AbstractClass:step2--->填寫入職登記信息
AbstractClass:step3--->簽訂勞動(dòng)合同
AbstractClass:step4--->辦理工牌,安排工位
--------------關(guān)系戶入職------------
ConcreateClassA:step1--->關(guān)系戶 準(zhǔn)備入職材料
AbstractClass:step2--->填寫入職登記信息
AbstractClass:step3--->簽訂勞動(dòng)合同
AbstractClass:step4--->辦理工牌,安排工位
到此這篇關(guān)于Java行為型設(shè)計(jì)模式之模板方法詳解的文章就介紹到這了,更多相關(guān)Java模板方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java設(shè)計(jì)模式之模板方法模式
- Java設(shè)計(jì)模式之模板方法詳解
- Java設(shè)計(jì)模式之模板方法模式詳解
- 深入理解Java設(shè)計(jì)模式之模板方法模式
- Java設(shè)計(jì)模式之java模板方法模式詳解
- 分析設(shè)計(jì)模式之模板方法Java實(shí)現(xiàn)
- Java設(shè)計(jì)模式之淺談模板方法模式
- Java設(shè)計(jì)模式模板方法(Template)原理解析
- Java設(shè)計(jì)模式模板方法模式(Template)用法解析
- Java經(jīng)典設(shè)計(jì)模式之模板方法模式定義與用法示例
- java設(shè)計(jì)模式之模板方法模式詳解
- 舉例講解Java設(shè)計(jì)模式編程中模板方法模式的運(yùn)用實(shí)例
- 深入解析Java的設(shè)計(jì)模式編程中的模板方法模式
相關(guān)文章
攔截器獲取request的值之后,Controller拿不到值的解決
這篇文章主要介紹了攔截器獲取request的值之后,Controller拿不到值的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10mybatis plus 的動(dòng)態(tài)表名的配置詳解
這篇文章主要介紹了mybatis plus 的動(dòng)態(tài)表名的配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Java實(shí)現(xiàn)查找文件和替換文件內(nèi)容
這篇文章主要為大家詳細(xì)介紹了Java語言如何實(shí)現(xiàn)查找文件和替換文件內(nèi)容功能,文中的示例代碼講解詳細(xì),感興趣的可以跟隨小編一起學(xué)習(xí)一下2022-08-08Springboot自定義mvc組件如何實(shí)現(xiàn)
這篇文章主要介紹了Springboot自定義mvc組件如何實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Java中的notyfy()和notifyAll()的本質(zhì)區(qū)別
很多朋友對(duì)java中的notyfy()和notifyAll()的本質(zhì)區(qū)別不了解,今天小編抽空給大家整理一篇教程關(guān)于Java中的notyfy()和notifyAll()的本質(zhì)區(qū)別,需要的朋友參考下吧2017-02-02基于HttpServletResponse 相關(guān)常用方法的應(yīng)用
本篇文章小編為大家介紹,基于HttpServletResponse 相關(guān)常用方法的應(yīng)用,需要的朋友參考下2013-04-04