模板方法模式

Java的集合就是一個典型的,利用了模板方法模式的例子蹂匹。Java集合中的Collection集合包括List和Set兩大組成部分。List是隊列,而Set是沒有重復(fù)元素的集合火鼻。它們共同的接口都在Collection接口聲明;例如雕崩,都包含了size()魁索,isEmpty()方法。而AbstractCollection這個抽象類則實現(xiàn)了它們共同的方法盼铁,其余未實現(xiàn)的方法定義為抽象方法粗蔚。List和Set的實例類,就是通過繼承AbstractCollection(或它的子類)饶火,省去了許多重復(fù)性編碼的工作鹏控!

模板方法

一個模板方法是定義在抽象類中的,把基本操作方法組合在一起形成一個總算法或一個總行為的方法肤寝。
一個抽象類可以有任意多個模板方法当辐,而不限于一個。每一個模板方法都可以調(diào)用任意多個具體方法鲤看。

基本方法

基本方法又可以分為三種:抽象方法(Abstract Method)缘揪、具體方法(Concrete Method)和鉤子方法(Hook Method)。
? 抽象方法: 一個抽象方法由抽象類聲明义桂,由具體子類實現(xiàn)找筝。在Java語言里抽象方法以abstract關(guān)鍵字標示。
? 具體方法: 一個具體方法由抽象類聲明并實現(xiàn)慷吊,而子類并不實現(xiàn)或置換呻征。
? 鉤子方法: 一個鉤子方法由抽象類聲明并實現(xiàn),而子類會加以擴展罢浇。通常抽象類給出的實現(xiàn)是一個空實現(xiàn)陆赋,作為方法的默認實現(xiàn)。

abstract public class AbstractClass {
    // 模板方法
    public void templateMethod(){
        hookMethod(); //調(diào)用基本方法(由子類實現(xiàn))
        abstractMethod(); //調(diào)用基本方法(由子類實現(xiàn))
        concreteMethod(); //調(diào)用基本方法(已經(jīng)實現(xiàn))
    }

    // 基本方法的聲明(由子類實現(xiàn)嚷闭,但抽象模板給出了默認實現(xiàn))
    public void hookMethod() {}

    // 基本方法的聲明(由子類實現(xiàn))
    public abstract void abstractMethod();

    // 基本方法(已經(jīng)實現(xiàn))
    public final void concreteMethod(){
        // do something
    }
}

public class ConcreteClass extends AbstractClass {
    // 基本方法的實現(xiàn)
    @Override
    public void hookMethod() {
        // do something
    }

    // 基本方法的實現(xiàn)
    @Override
    public void abstractMethod() {
        // do something
    }
}

具體代碼參考:
抽象模板類:

abstract public class Account {

    protected String accountNumber;

    public Account() {
        accountNumber = null;
    }

    public Account(String accountNumber) {
        this.accountNumber = accountNumber;
    }

    // 模板方法攒岛,計算利息數(shù)額
    public final double calculateInterest(){
        double interestRate = doCalculateInterestRate();
        String accountType = doCalculateAccountType();
        double amount = calculateAmount(accountType, accountNumber);
        return amount * interestRate;
    }

    // 基本方法留給子類實現(xiàn)
    protected abstract String doCalculateAccountType();

    // 基本方法留給子類實現(xiàn)
    protected abstract double doCalculateInterestRate();

    // 基本方法,已經(jīng)實現(xiàn)
    private double calculateAmount(String accountType, String accountNumber){
        // retrive amount from database
        return 7243.00D;
    }
}

具體子類實現(xiàn)

public class MoneyMarketAccount extends Account {

    @Override
    protected String doCalculateAccountType() {
        return "Money Market";
    }

    @Override
    protected double doCalculateInterestRate() {
        return 0.045D;
    }
}

參考:http://wangkuiwu.github.io/2012/10/27/design_pattern/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胞锰,一起剝皮案震驚了整個濱河市灾锯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嗅榕,老刑警劉巖顺饮,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吵聪,死亡現(xiàn)場離奇詭異,居然都是意外死亡兼雄,警方通過查閱死者的電腦和手機吟逝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赦肋,“玉大人块攒,你說我怎么就攤上這事〉璩耍” “怎么了囱井?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長趣避。 經(jīng)常有香客問我庞呕,道長,這世上最難降的妖魔是什么程帕? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任千扶,我火速辦了婚禮,結(jié)果婚禮上骆捧,老公的妹妹穿的比我還像新娘澎羞。我一直安慰自己,他們只是感情好敛苇,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布妆绞。 她就那樣靜靜地躺著,像睡著了一般枫攀。 火紅的嫁衣襯著肌膚如雪括饶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天来涨,我揣著相機與錄音图焰,去河邊找鬼。 笑死蹦掐,一個胖子當著我的面吹牛技羔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播卧抗,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼藤滥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了社裆?” 一聲冷哼從身側(cè)響起拙绊,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后标沪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榄攀,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年金句,在試婚紗的時候發(fā)現(xiàn)自己被綠了檩赢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡趴梢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出币他,到底是詐尸還是另有隱情坞靶,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布蝴悉,位于F島的核電站彰阴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拍冠。R本人自食惡果不足惜尿这,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庆杜。 院中可真熱鬧射众,春花似錦、人聲如沸晃财。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽断盛。三九已至罗洗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钢猛,已是汗流浹背伙菜。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留命迈,地道東北人贩绕。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像壶愤,于是被迫代替她去往敵國和親丧叽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容