1. 程式人生 > 實用技巧 >設計模式:模板方法設計模式

設計模式:模板方法設計模式

定義

模板方法設計模式又叫做模板模式,指定義一個操作中的演算法的框架,而將一些步驟延遲到子類中,使得字類可以不改變一個演算法的結構即可重新定義該演算法的某些特定步驟,屬於行為型設計模式。

使用場景:

  • 一次性實現一個演算法的不變部分,並將可變的行為留給子類實現。
  • 各個類中公共的行為被提取出來,集中到一個公共的父類中,避免重複。

場景一

需求:需要喝一杯龍井

步驟如下:

public class MakeTea {

    public void start(){
        step1();
        step2();
        step3();
        step4();
        step5();
    }

    private void step1(){
        System.out.println("燒水");
    }

    private void step2(){
        System.out.println("茶葉放在杯子中");
    }

    private void step3(){
        System.out.println("將開水倒入杯子");
    }

    private void step4(){
        System.out.println("過一段時間");
    }

    private void step5(){
        System.out.println("喝茶");
    }

}

測試:

    public static void main(String[] args) {
        MakeTea makeTea = new MakeTea();
        makeTea.start();
    }

場景二

需求:現在又需要喝一杯咖啡

步驟如下:

public class MakeCoffee {

    public void start(){
        step1();
        step2();
        step3();
        step4();
        step5();
    }

    private void step1(){
        System.out.println("燒水");
    }

    private void step2(){
        System.out.println("咖啡粉放在杯子中");
    }

    private void step3(){
        System.out.println("將開水倒入杯子");
    }

    private void step4(){
        System.out.println("過一段時間");
    }

    private void step5(){
        System.out.println("喝咖啡");
    }

}

我們發現喝咖啡和喝茶流程步驟基本一致,但小細節不一樣,我們可以將其抽取到一個類中(其實我們平時開發時有時候用到了模板方法模式,但是我們不知道這是模板方法模式)

模板方法模式寫法

首先我們對上述需求建立模板,把步驟流程方法和相同的步驟給封裝到模板中,以後我們就跟著模板來就行了。(建立方法的模板,子類跟著模板來就可以了)

public abstract class Make {

    public final void start(){
        step1();
        step2();
        step3();
        step4();
        step5();
    }

    private void step1(){
        System.out.println("燒水");
    }

    abstract void step2();

    private void step3(){
        System.out.println("將開水倒入杯子");
    }

    private void step4(){
        System.out.println("過一段時間");
    }

    abstract void step5();
}

建立喝咖啡的實現類

public class MakeCoffee extends Make{
    @Override
    void step2() {
        System.out.println("咖啡粉放在杯子中");
    }

    @Override
    void step5() {
        System.out.println("喝咖啡");
    }
}

類圖:

測試:

    public static void main(String[] args) {
        Make make = new MakeCoffee();
        make.start();
    }

以上就是模板方法設計模式的具體實現,理解也沒有難度。