上一篇 <<<策略模式(Strategy Pattern)
下一篇 >>>外觀/門面模式(Facade Pattern)
模板方法模式:定義一個操作中的算法的骨架,差異性的實現(xiàn)交由子類完成。

應(yīng)用場景
- 支付回調(diào)、銀行業(yè)務(wù)
- 聯(lián)合登錄、對接三方短信接口、分布式鎖
- 數(shù)據(jù)庫訪問的封裝
- Junit單元測試
- Hibernate中模板程序
- spring中JDBCTemplate,HibernateTemplate等
-
httpservlet中的doget、dopost等
模板方法模式優(yōu)缺點
優(yōu)點:
模板方法模式通過把不變的行為搬移到超類,去除了子類中的重復(fù)代碼。子類實現(xiàn)算法的某些細(xì)節(jié),有助于算法的擴展。通過一個父類調(diào)用子類實現(xiàn)的操作,通過子類擴展增加新的行為,符合“開放-封閉原則”。
缺點:
每個不同的實現(xiàn)都需要子類,會導(dǎo)致子類個數(shù)的增加,設(shè)計更加抽象。
模板方法模式與策略模式的區(qū)別
相同點:它們的細(xì)節(jié)均由子類實現(xiàn)
不同點:
a.策略是相同的操作,定義為接口;模板方法是相同的骨架,定義為抽象類。
b.策略主要解決多重if的問題;模板方法主要解決代碼冗余的問題。
模板方法模式實現(xiàn)方式核心代碼
/**
* 異步回調(diào)業(yè)務(wù)
* @return
*/
public String asyncCallBack() {
// 1. 支付回調(diào)驗證參數(shù)
Map<String, String> verifySignatureMap = verifySignature();
// 2. 參數(shù)驗證成功,寫入日志中..
payLog(verifySignatureMap);
String analysisCode = verifySignatureMap.get("analysisCode");
if (!analysisCode.equals("200")) {
return resultFail();
}
// 3. 執(zhí)行回調(diào)異步相關(guān)邏輯
return asyncService(verifySignatureMap);
}
/**
* 支付回調(diào)驗證參數(shù)
*
* @return
*/
protected abstract Map<String, String> verifySignature();
/**
* 每個子類需要實現(xiàn) 實現(xiàn)業(yè)務(wù)解析操作
*
* @return
*/
protected abstract String asyncService(Map<String, String> verifySignatureMap);
@Override
protected Map<String, String> verifySignature() {
//具體業(yè)務(wù)
}
@Override
protected String asyncService(Map<String, String> verifySignatureMap) {
//具體業(yè)務(wù)
}
/**
* 真實調(diào)用
*/
@RequestMapping("/test")
public String test(String beanId){
AbstractPayCallbackTemplate payCallbackTemplate = TemplateFactory.getPayCallbackTemplate(beanId);
return payCallbackTemplate.asyncCallBack();
}
相關(guān)文章鏈接:
<<<23種常用設(shè)計模式總覽
<<<代理模式(Proxy Pattern)
<<<裝飾模式(Decorator Pattern)
<<<觀察者模式(Observer Pattern)
<<<單例模式(Singleton Pattern)
<<<責(zé)任鏈模式(Chain of Responsibility Pattern)
<<<策略模式(Strategy Pattern)
<<<外觀/門面模式(Facade Pattern)
<<<建造者模式(Builder Pattern)
<<<適配器模式(Adapter Pattern)
<<<原型模式(Prototype Pattern)
<<<工廠相關(guān)模式(Factory Pattern)
