設計模式之----Java模板模式

virtuousOne發表於2020-10-11

模板模式
又叫模板方法模式,是指定義一個演算法的骨架,並允許子類為一個或者多個步驟提供實現;模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法的某些步驟;屬於行為性設計模式。
列舉:公開網課的過程;1.先發布預習資料;2.製作PPT課件;3.線上直播;4 .提交筆記;5.提交原始碼;6.佈置作業(有的課程有作業,有的沒有)這個流程;
步驟1.定義好父類,以及公共的方法;

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();

    //鉤子方法:實現流程的微調
    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("分發預習資料");
    }

}

在這裡插入圖片描述
步驟2.Java網課的具體實現;只實現不同的,相同的就用父類的;

public class JavaCourse extends NetworkCourse {
    void checkHomework() {
        System.out.println("檢查Java的架構課件");
    }
}

在這裡插入圖片描述

同理,大資料課程也有自己對應的實現;

public class BigDataCourse extends NetworkCourse {

    private boolean needHomeworkFlag = false;

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

    void checkHomework() {
        System.out.println("檢查大資料的課後作業");
    }

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

在這裡插入圖片描述
步驟3.進行測試

  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();

    }

在這裡插入圖片描述
總結:
模板方法的角色:
1.抽象模板角色:它一般是一個抽象類或者介面,它抽象出操作演算法骨架;
2.具體抽象模板角色:它實現了抽象模板角色的方法,它是操作演算法骨架業務的具體化。
模板方法的優點:
1.封裝不變的部分,擴充套件可變部分。
2.提取了公共程式碼,便於維護。
3.行為由父類控制,子類實現。
模板方法的缺點:
每一個不同的實現都需要一個子類來實現,這樣導致類的個數增加。
程式碼地址為:https://github.com/virtuousOne/Design-patterns

相關文章