大戰設計模式 11 模板方法模式

2022-02-13 05:23:01 字數 931 閱讀 3898

設計模式使用的例子

定義乙個操作中演算法的框架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變乙個演算法的結構即可重新定義該演算法的特定步驟。

abstractclass(抽象類):在抽象類中定義了一系列基本操作(primitive operations)

這些基本操作可以是具體的,也可以是抽象的,每乙個基本操作對應演算法的乙個步驟,在其子類中可以重新定義或實現這些步驟。

同時,在抽象類中實現了乙個模板方法(template method),用於定義乙個演算法的框架。

concreteclass(具體子類):抽象類的子類,用於實現在父類中宣告的抽象基本操作以完成子類特定演算法的步驟,也可以覆蓋在父類中已經實現的具體基本操作。

模板方法中可以通過子類來覆蓋父類的基本方法,不同的子類可以提供基本方法的不同實現,更換和增加新的子類很方便,符合單一職責和開閉原則。

需要為每乙個基本方法的不同實現乙個子類,如果父類中可變的基本方法太多,將會導致類的個數增加,系統更加龐大,設計也會更加抽象。

對一些複雜的演算法進行分割,將其演算法中固定不變的部分設計為模板方法和父類具體方法,而一些可以改變的細節由其子類來實現。

需要通過子類來決定父類演算法中某個步驟是否執行,實現子類對父類的反向控制。

1、模板方法模式的實現步驟:

將兩個具有相同演算法結果方法的類提出公共的部分

將演算法固定不變的部分設計為模板

父類抽象一些必須由子類重寫的方法

父類實現一些一定不需要子類重寫的方法

父類實現一些方法,子類可以重寫,也可以不重寫(稱為鉤子hook)

2、模板方法模式的重點就是提出了公共的部分(模板)

這個設計模式的優點在於父類對可以通過控制方法重寫的許可權來控制子類;子類可以通過是否重寫方法來控制父類中的模板;

3、模板方法模式的長相很多,符合上述描述的都可以稱為模板方法,所以很多時候模板方法被使用了但不知道被使用了

大戰設計模式 11 模板方法模式

設計模式使用的例子 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變乙個演算法的結構即可重新定義該演算法的特定步驟。abstractclass 抽象類 在抽象類中定義了一系列基本操作 primitive operations 這些基本操作可以是具體的,也可以是抽象的,...

模板設計模式 設計模式 模板方法模式

在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...

設計模式 模板方法設計模式

物件導向,萬物皆物件,用乙個雷來反應現實生活中的東西。比如銀行系統,業務公升級 活期 定期,差別很小,就加判斷 違背單一職責 差別比較多,尤其是模擬較複雜,型別拆分下。拆分之後,自然就有父類,重用。利率 每個客戶端都有利率,但是各不一樣 抽象方法。show 不分客戶端是一樣的,個別客戶端是不一樣的 ...