1. 程式人生 > >模版方法設計模式

模版方法設計模式

例子 extends 評分 extend 一個 屬於 定義 開發 rac

什麽模板方法

模板方法模式:定義一個操作中的算法骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的

重復代碼全部在父類裏面,不同業務的,抽取給子類進行實現。抽取過程---抽象方法。

某些特定步驟。

核心:處理某個流程的代碼已經都具備,但是其中某個節點的代碼暫時不能確定。因此,我們采用工廠方法模式,將這個節點的代碼實現轉移給

子類完成。即:處理步驟在父類中定義好,具體的實現延遲到子類中定義。

說白了,就是將一些相同操作的代碼,封裝成一個算法的骨架。核心的部分留在子類中操作,在父類中只把那些骨架做好。

例如:

1.去銀行辦業務,銀行給我們提供了一個模板就是:先取號,排對,辦理業務(核心部分我們子類完成),給客服人員評分,完畢。

這裏辦理業務是屬於子類來完成的,其他的取號,排隊,評分則是一個模板。

2.去餐廳吃飯,餐廳給提供的一套模板就是:先點餐,等待,吃飯(核心部分我們子類完成),買單。

這裏吃飯是屬於子類來完成的,其他的點餐,買單則是餐廳提供給我們客戶的一個模板。

技術分享圖片

什麽時候使用模板方法

實現一些操作時,整體步驟很固定,但是呢。就是其中一小部分容易變,這時候可以使用模板方法模式,將容易變的部分抽象出來,供子類實現。

開發中應用場景

其實,各個框架中,都有模板方法模式的影子。

數據庫訪問的封裝、Junit單元測試、servlet中關於doGet/doPost方法的調用

Hibernate中模板程序、spring中JDBCTemplate,HibernateTemplate等等

代碼例子:

package com.example.demo.templatefactory;

/**
* 模版方法接口
* 場景:第三方短信接口服務方調用聯通運行商、移動運營商 實現的場景
* 1.開始 記錄開始日誌
* 2.調用 接口進行代碼邏輯處理(不同運行商邏輯處理可能不同)
* 3.返回結果 記錄結束日誌
*
* 從上面這幾個步驟來看,第一步與第三步的操作都是一樣的。只有第二步需要做單獨的處理。
* 因為開始記錄日誌、結束記錄日誌做的都是統一處理,只有業務邏輯處理單獨的方法進行處理(抽象類)。
*/
public abstract class MessageTemplate {

public void sendMsg() {
//1. 記錄開始日誌
addStartLog();

//2.調用具體的運營商發送消息
httpRequest();

//3.結束結束日誌
addEndLog();
}


/**
* 不同的運營商 請求出來可能不同
*/
public abstract void httpRequest();

/**
* 調用方法開始時記錄日誌操作
*/
private void addStartLog() {

System.out.println("調用運行商開始時記錄日誌");
}


/**
* 調用方法結束時記錄日誌
*/
private void addEndLog() {
System.out.println("調用運行商結束時記錄日誌");
}

}

package com.example.demo.templatefactory;

/**
* 接口實現類
*/
public class Liantong extends MessageTemplate {
@Override
public void httpRequest() {
System.out.println("調用聯通接口邏輯處理執行...");
}
}

package com.example.demo.templatefactory;
/**
* 接口實現類
*/
public class YiDong extends MessageTemplate {
@Override
public void httpRequest() {
System.out.println("調用移動接口邏輯處理執行...");
}
}

package com.example.demo.templatefactory;

/**
* 客戶端調用
*/
public class ClientTemplate {
public static void main(String[] args) {
//初始化
MessageTemplate yiDong = new YiDong();
//調用方法執行
yiDong.sendMsg();
}
}

模版方法設計模式