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