設計模式-模板方法模式(Template Pattern)

上一篇 <<<策略模式(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)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末例朱,一起剝皮案震驚了整個濱河市孝情,隨后出現(xiàn)的幾起案子洒嗤,更是在濱河造成了極大的恐慌渔隶,老刑警劉巖羔挡,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異绞灼,居然都是意外死亡呈野,警方通過查閱死者的電腦和手機低矮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門军掂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人昨悼,你說我怎么就攤上這事良姆。” “怎么了幔戏?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長税课。 經(jīng)常有香客問我闲延,道長,這世上最難降的妖魔是什么韩玩? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任垒玲,我火速辦了婚禮,結果婚禮上找颓,老公的妹妹穿的比我還像新娘合愈。我一直安慰自己,他們只是感情好击狮,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布佛析。 她就那樣靜靜地躺著,像睡著了一般彪蓬。 火紅的嫁衣襯著肌膚如雪寸莫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天档冬,我揣著相機與錄音膘茎,去河邊找鬼桃纯。 笑死,一個胖子當著我的面吹牛披坏,可吹牛的內容都是我干的态坦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼棒拂,長吁一口氣:“原來是場噩夢啊……” “哼伞梯!你這毒婦竟也來了?” 一聲冷哼從身側響起着茸,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤壮锻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后涮阔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猜绣,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年敬特,在試婚紗的時候發(fā)現(xiàn)自己被綠了掰邢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡伟阔,死狀恐怖辣之,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情皱炉,我是刑警寧澤怀估,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站合搅,受9級特大地震影響多搀,放射性物質發(fā)生泄漏。R本人自食惡果不足惜灾部,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一康铭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赌髓,春花似錦从藤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至荣倾,卻和暖如春扫责,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逃呼。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工鳖孤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留者娱,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓苏揣,卻偏偏與公主長得像黄鳍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子平匈,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內容