模板方法模式 行為模式

2021-10-10 17:04:51 字數 1404 閱讀 7600

1、描述

模板方法是一種行為設計模式,它在基類中定義了乙個演算法的框架,允許子類在不修改結構的情況下重寫演算法的特定步驟。

優點:封裝不變部分,擴充套件可變部分;提取公共部分**,便於維護;行為由父類控制,子類實現

缺點:按照我們的設計習慣,抽象類負責宣告最抽象、最一般的事物屬性和方法,實現類完成具體的事物屬性和方法。但是模板方法模式卻顛倒了,抽象類定義了部分抽象方法,由子類實現,子類執行的結果影響了父類的結果,也就是子類對父類產生了影響,這在複雜的專案中,會帶來**閱讀的難度,而且也會讓新手產生不適感。

2、結構圖

#include #include //抽象類定義了乙個模板方法,其中通常會包含某個抽象原語操作組成的演算法框架。具體子類會

//實現這些操作,但是不會對模板方法做出修改。

class abstractclass

//這些步驟已經在基類中直接實現。

protected:

void baseoperation1() const

void baseoperation2() const

void baseoperation3() const

//這些操作必須在子類中實現

virtual void requiredoperations1() const = 0;

virtual void requiredoperation2() const = 0;

//這些是鉤子。子類可以覆蓋它們,但這不是強制的,因為它們已經有了預設實現(雖然為空)。

//鉤子在演算法的一些關鍵位置提供了額外的擴充套件點。

virtual void hook1() const {}

virtual void hook2() const {}

};//具體的類必須實現所有基類的抽象介面。它們也能重寫一些預設的實現

class concreteclass1 : public abstractclass

void requiredoperation2() const override

};//一般來說,具體類只重寫基類的一小部分操作

class concreteclass2 : public abstractclass

void requiredoperation2() const override

void hook1() const override

};//客戶呼叫模板方法執行演算法。客戶不需要知道具體的子類,它只使用基類的介面

void clientcode(abstractclass *class_)

int main()

參考:

行為模式 模板方法

內容 定義乙個操作中的演算法骨架,將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。使用模板方法,需要用到兩種角色,分別是抽象類和具體類。抽象類的作用是是定義抽象類 鉤子操作 實現乙個模板方法作為演算法的骨架。具體類的作用實現原子操作。import ...

行為模式之模板方法模式

模板方法 template method 普遍存在於抽象類中,它用一些抽象的方法定義乙個演算法,而將這些抽象方法的具體實現放到子類中。模板方法包含兩部分 abstract class abstractclass abstract void prepare abstract void execute ...

12 模板方法模式 行為模式

4.擴充套件 5.參考資料 參考 設計模式之禪 個人理解 乙個演算法的實現有固定的步驟,比如上面的run 方法有start,stop,alarm和engineboom這幾個基本方法。在抽象類定義這些基本方法,然後模板方法 run方法 呼叫這些基本方法。子類繼承抽象類,由子類實現基本方法。子類的行為就...