設計模式學習(七)模板模式

定義

模板模式通常又叫做模板方法模式Template Method Pattern)是指定義一個算法的骨架,並允許子類爲一個或者多個步驟提供實現。

模板方法使得子類可以再不改變算法結構的情況下,重新定義算法的某些步驟。

屬於行爲型設計模式。

適用場景

  1. 一次性實現一個算法的不變的部分,並將可變的行爲留給子類來實現;
  2. 各子類中公共的行爲被提取出來並集中到一個公共的父類中,從而避免代碼重複。

UML類圖

在這裏插入圖片描述

代碼實現

模板模式會有一個或者多個未實現的方法,而且這幾個未實現的方法有固定的執行順序

NetworkCourse

public abstract class NetworkCourse {

    protected final void createCourse() {
        // 1.發佈預習資料
        this.postPreResource();

        // 2.製作PPT課件
        this.createPPT();

        // 3.在線直播
        this.liveVideo();

        // 4.提交課件、課堂筆記
        this.postNote();

        // 5.提交源碼
        this.postSource();

        // 6.佈置作業,有些課是沒有作業的,有些課是有作業的
        // 如果有作業的話,檢查作業,如果沒有作業,完成了
        if (needHomeWork()) {
            checkHomeWork();
        }

    }

    /**
     * 檢查作業(鉤子方法),留給子類去微調
     */
    abstract void checkHomeWork();

    /**
     * 是否有作業,默認沒有作業
     * @return
     */
    protected boolean needHomeWork() {
        return false;
    }

    final void postSource() {
        System.out.println("提交源代碼");
    }

    final void postNote() {
        System.out.println("提交課件、筆記");
    }

    final void liveVideo() {
        System.out.println("直播授課");
    }

    final void createPPT() {
        System.out.println("創建備課PPT");
    }

    final void postPreResource() {
        System.out.println("發佈預習資料");
    }
}

JavaCourse

public class JavaCourse extends NetworkCourse {

    @Override
    void checkHomeWork() {
        System.out.println("檢查Java的架構課件");
    }
}

BigDataCourse

public class BigDataCourse extends NetworkCourse {

    /**
     * 是否需要家庭作業
     */
    private boolean needHomeworkFlag = false;

    public BigDataCourse(boolean needHomeworkFlag) {
        this.needHomeworkFlag = needHomeworkFlag;
    }

    @Override
    void checkHomeWork() {
        System.out.println("檢查大數據的課後作業");
    }

    @Override
    protected boolean needHomeWork() {
        return this.needHomeworkFlag;
    }
}

測試類

public class NetworkCourseTest {

    public static void main(String[] args) {
        System.out.println("--Java架構師課程--");
        NetworkCourse javaCourse = new JavaCourse();
        javaCourse.createCourse();


        System.out.println("--大數據課程--");
        NetworkCourse bigDataCourse = new BigDataCourse(true);
        bigDataCourse.createCourse();
    }
}

輸出結果

--Java架構師課程--
發佈預習資料
創建備課PPT
直播授課
提交課件、筆記
提交源代碼
--大數據課程--
發佈預習資料
創建備課PPT
直播授課
提交課件、筆記
提交源代碼
檢查大數據的課後作業

模板模式的優點

  1. 提高代碼的複用性;
  2. 提高代碼的擴展性;
  3. 符合開閉原則。

模板模式的缺點

  1. 類數目的增加;
  2. 間接地增加了系統實現的複雜度;
  3. 繼承關係自身缺點,如果父類添加新的抽象方法,所有子類都要改一遍。
發佈了62 篇原創文章 · 獲贊 48 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章