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模型等,都會發現我們其實已經使用過了,那我們又爲什麼去學習這種設計模式呢?只能說,我們現在爬的山還不夠高,看的不遠,前人的智慧總結,用時方恨少。
- 可以使邏輯處理通用化,更方便判斷錯誤
- 父類約束子類,使雙方更加協調