Java行為型設計模式之模板方法詳解
模板方法模式
模板方法模式屬于行為型設計模式。它是指定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。
模板方法模式實際上是封裝了一個固定流程,該流程由幾個步驟組成,具體步驟可以由子類進行不同實現(xiàn),從而讓固定的流程產(chǎn)生不同的結(jié)果。
模板方法模式的本質(zhì)是抽象封裝流程,具體進行實現(xiàn)。
應用場景
當完成一個操作具有固定的流程時,由抽象固定流程步驟,具體步驟交給子類進行具體實現(xiàn)(固定的流程,不同的實現(xiàn))。
1.實現(xiàn)一個算法的不變的部分(子類共有方法),將可變的行為留給子類來實現(xiàn)。
2.各子類中公共的行為被提取出來并集中到一個公共的父類中,以而避免代碼重復。
比如:入職資料的填寫,通常會有一系列的流程,只需要按照流程規(guī)則一步一步做即可。是目標方法模式的體現(xiàn)。
主要角色
1.抽象模板(AbstractClass)
抽象模板類,定義了一套算法框架/流程。
2.具體實現(xiàn)(ConcreteClass)
具體實現(xiàn)類,對算法框架/流程的某些步進行了實現(xiàn)。

優(yōu)缺點
1.將相同處理邏輯代碼放到抽象父類中,提高代碼的復用性。
2.將不同代碼放到不同子類中,通過對子類的擴展增加新的行為,提高代碼的擴展性。
3.把不變的行為寫在父類上,去除子類的重復代碼,提供了一個很好的代碼復用平臺,符合開閉原則
缺點
1.類數(shù)目的增加,每個抽象類都需要一個子類來實現(xiàn),這樣導致類的個數(shù)增加。
2.類數(shù)量的增加,間接地增加了系統(tǒng)實現(xiàn)的復雜度。
3.繼承關系自身缺點,如果父類添加新的抽象方法,所有子類都要改一遍。
模板方法模式的基本使用
創(chuàng)建抽象模板角色
public abstract class AbstractClass {
protected void step1() {
System.out.println("AbstractClass:step1--->準備入職材料");
}
protected void step2() {
System.out.println("AbstractClass:step2--->填寫入職登記信息");
}
protected void step3() {
System.out.println("AbstractClass:step3--->簽訂勞動合同");
}
protected void step4() {
System.out.println("AbstractClass:step4--->辦理工牌,安排工位");
}
public final void templateMehthod() {
this.step1();
this.step2();
this.step3();
this.step4();
}
}創(chuàng)建具體實現(xiàn)
public class ConcreteClassA extends AbstractClass {
@Override
protected void step1() {
System.out.println("ConcreateClassA:step1--->普通員工 準備入職材料");
}
}
public class ConcreteClassB extends AbstractClass {
@Override
protected void step1() {
System.out.println("ConcreateClassA:step1--->關系戶 準備入職材料");
}
}
客戶端調(diào)用
public static void main(String[] args) {
System.out.println("--------------普通人入職------------");
AbstractClass abcA = new ConcreteClassA();
abcA.templateMehthod();
System.out.println("--------------關系戶入職------------");
AbstractClass abcB = new ConcreteClassB();
abcB.step3();
abcB.step4();
}
--------------普通人入職------------
ConcreateClassA:step1--->普通員工 準備入職材料
AbstractClass:step2--->填寫入職登記信息
AbstractClass:step3--->簽訂勞動合同
AbstractClass:step4--->辦理工牌,安排工位
--------------關系戶入職------------
ConcreateClassA:step1--->關系戶 準備入職材料
AbstractClass:step2--->填寫入職登記信息
AbstractClass:step3--->簽訂勞動合同
AbstractClass:step4--->辦理工牌,安排工位
到此這篇關于Java行為型設計模式之模板方法詳解的文章就介紹到這了,更多相關Java模板方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot環(huán)境搭建及第一個程序運行(小白教程)
這篇文章主要介紹了SpringBoot環(huán)境搭建及第一個程序運行,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06
Idea Project文件目錄不見了,只剩External Libraries和imi文件的解決
這篇文章主要介紹了Idea Project文件目錄不見了,只剩External Libraries和imi文件的解決方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
詳解Java中Dijkstra(迪杰斯特拉)算法的圖解與實現(xiàn)
Dijkstra(迪杰斯特拉)算法是典型的單源最短路徑算法,用于計算一個節(jié)點到其他所有節(jié)點的最短路徑。本文將詳解該算法的圖解與實現(xiàn),需要的可以參考一下2022-05-05
Spring boot+mybatis+thymeleaf 實現(xiàn)登錄注冊增刪改查功能的示例代碼
這篇文章主要介紹了Spring boot+mybatis+thymeleaf 實現(xiàn)登錄注冊增刪改查功能的示例代碼,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
Springboot居然可以設置動態(tài)的Banner(推薦)
這篇文章主要介紹了Springboot居然可以設置動態(tài)的Banner,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03

