複習:GoF的23種設計模式之Template Method模式(行爲型)

Template Method模式 (模型)

我們先介紹什麼是模板

 就如我們打開CSDN的每一個頁面,都有一個已備案提醒的尾標,每一個頁面都有,那麼是不是每個頁面都去添加相同的代碼呢?

答:不是的,我們先寫一個模板,此模板就具有尾標,我們每個頁面都是藉助這個母模板,那麼我們就不需要手動的去添加了。

那什麼是 Template Method(模型)模式

答:在父類中定義處理流程的框架,在子類中實現具體的處理。模板方法僅決定這些抽象方法的執行順序,這些抽象方法的實現都由子類負責,並且子類不允許覆寫模板方法。 

示例代碼:

假設場景:假如我們的網頁對Vip用戶和普通用戶的請求有不同的響應。

public class TemplateMethodTest {
    public static void main(String[] args) {
        //普通用戶請求時
        MotherAbstractClass common = new CommonConcreteClass();
        common.response();
        //vip用戶請求時
        MotherAbstractClass vip = new VipConcreteClass();
        vip.response();
    }
}

abstract class MotherAbstractClass {
    public final void response() {
        open();
        data();
    }
    public abstract void open();
    public abstract void data();
}

class VipConcreteClass extends MotherAbstractClass {
    @Override
    public void open() {
        System.out.println("我是vip");
    }
    @Override
    public void data() {
        System.out.println("我是vip的響應數據");
    }
}

class CommonConcreteClass extends MotherAbstractClass {
    @Override
    public void open() {
        System.out.println("我是普通用戶");
    }
    @Override
    public void data() {
        System.out.println("我是普通的響應數據");
    }
}

UML類圖

 什麼時候使用

其實我們在不知不覺中就會使用到模板模型,返回看iterate模型、adapter模型等,都會發現我們其實已經使用過了,那我們又爲什麼去學習這種設計模式呢?只能說,我們現在爬的山還不夠高,看的不遠,前人的智慧總結,用時方恨少。

  1. 可以使邏輯處理通用化,更方便判斷錯誤
  2. 父類約束子類,使雙方更加協調
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章