33. 模板方法模式

定義

模板方法模式(Template Method Pattern):定義一個(gè)操作中算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。

通俗理解

當(dāng)我們在寫ppt的時(shí)候,我們第一個(gè)想到的就是上網(wǎng)找一個(gè)模板,然后用這個(gè)模板,把ppt弄得漂亮一些。這里的模板就是我們今天要講到的模板模式,它是一種用繼承來復(fù)用代碼的方式,將通用的方法放到父類當(dāng)中,然后彼此不同的方法方到子類上面。就像寫ppt一樣,每一個(gè)人寫ppt的內(nèi)容都是不一樣的,但是外觀,一些邊框字體都是一樣的,這樣我們就可以采用下載網(wǎng)上的ppt模板,套上自己的內(nèi)容去做ppt,這樣就可以很快很高效地完成ppt的書寫了。因此這里的ppt模板就像父類,而自己的內(nèi)容就像子類,子類能用父類的設(shè)計(jì),就實(shí)現(xiàn)了復(fù)用。

示例

用模板寫ppt。

渣渣程序

PPT類

public class PPT1 {
    public void outlook() {
        System.out.println("選擇模板");
    }
    public void writePPT() {
        System.out.println("寫PPT1");
    }
}
// PPT2類似,省略

程序入口

public class Main {
    static PPT1 ppt1 = new PPT1();
    static PPT2 ppt2 = new PPT2();
    public static void main(String[] args) {
        ppt1.outlook();
        ppt1.writePPT();
        ppt2.outlook();
        ppt2.writePPT();
    }
}
//選擇模板
//寫PPT1
//選擇模板
//寫PPT2

問題就是,outlook方法,我們寫了兩遍,復(fù)制,黏貼代碼都是罪過,千萬不要當(dāng)CV程序員,解決辦法就是把他們提到父類里面。

優(yōu)化

類圖

image

程序

PPT抽象類和實(shí)現(xiàn)

public abstract class PPT {
    public void outlook() {
        System.out.println("選擇模板");
    }
    public abstract void writePPT();
}
public class PPT1 extends PPT{
    public void writePPT() {
        System.out.println("寫PPT1");
    }
}
// PPT2類似,省略

程序入口

public class Main {
    static PPT ppt1 = new PPT1();
    static PPT ppt2 = new PPT2();
    public static void main(String[] args) {
        ppt1.outlook();
        ppt1.writePPT();
        ppt2.outlook();
        ppt2.writePPT();
    }
}
//選擇模板
//寫PPT1
//選擇模板
//寫PPT2

除了在抽象類當(dāng)中定義具體的方法和抽象的方法外,還可以定義空方法和鉤子方法。

  • 空方法:在方法體上不做任何的操作;
  • 鉤子方法:返回為boolean的方法,用來確定是否運(yùn)行某個(gè)代碼片段,子類中確定是否運(yùn)行父類的某些片段。

優(yōu)點(diǎn)

  1. 代碼復(fù)用,將子類中復(fù)用的代碼都放到父類當(dāng)中去;
  2. 擴(kuò)展性強(qiáng)。

缺點(diǎn)

  1. 具體方法類比較多;
  2. 要知道哪些是共用的哪些不是,不然這種復(fù)用會變得很糟糕。

應(yīng)用場景

  1. 幾個(gè)類中的代碼片段反復(fù)出現(xiàn)的,(一個(gè)類中反復(fù)出現(xiàn)的可以提到一個(gè)方法中);
  2. 子類有統(tǒng)一的操作步驟與過程;
  3. 子類有具體的操作細(xì)節(jié);

代碼

e33_template_method_pattern

吐槽

幾個(gè)類中的代碼片段反復(fù)出現(xiàn)的,提到父類當(dāng)中。

http://www.itdecent.cn/p/2a167b733c87

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 【學(xué)習(xí)難度:★★☆☆☆,使用頻率:★★★☆☆】直接出處:模板方法模式梳理和學(xué)習(xí):https://github.co...
    BruceOuyang閱讀 845評論 0 2
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,181評論 25 708
  • 《干法》講到勞動,我們每天的工作都是勞動,有些腦力勞動,有些體力勞動。當(dāng)然由于自身能力層次,他的勞動面都不同,可是...
    書_贏閱讀 161評論 0 0
  • 來到這世間 幾經(jīng)磋磨 我想我要愛自己 有人說這是自戀 怎么當(dāng)我遇見你 我就忘記愛自己 只愛你 因?yàn)閻勰愣玫降男腋?..
    眠花城閱讀 210評論 0 0
  • 經(jīng)濟(jì)改革開放以來多種經(jīng)濟(jì)模式在不斷轉(zhuǎn)型,處于尖端的互聯(lián)網(wǎng)金融也積極融入其中,不斷發(fā)展和轉(zhuǎn)型。在面對互聯(lián)網(wǎng)較大規(guī)...
    大蝦米啊閱讀 120評論 0 1

友情鏈接更多精彩內(nèi)容