Head First設計模式之模板方法模式

2022-01-11 08:19:57 字數 1358 閱讀 9180

在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變演算法結構的情況下,重定義該演算法中的某些特定步驟。

比較通俗的說法,子類決定如何實現演算法中的某些步驟,比如兩個一連串的操作,操作次序是一樣的,有的操作相同,有的不同,將兩個連串操作抽象出父類;

子類在相同次序,但具體方法不一樣的操作 在父類抽象出來,然後在子類重寫實現,達到減少重複**。

以下以泡茶和泡咖啡為例子

namespace

designpatterns.template

}public

class

tea : beverage

public

override

void

addcondiments()

}public

class

coffee : beverage

public

override

void

addcondiments()

}public

abstract

class

beverage

public

abstract

void

brew();

public

abstract

void

addcondiments();

public

void

boilwater()

public

void

pourincup()}}

結果:

泡開水

沖泡茶葉

倒進杯子

加檸檬==== 我是分界線 ====泡開水

沖泡咖啡

倒進杯子

加糖和牛奶

請按任意鍵繼續. . .

在多個子類擁有相同的方法,並且這些方法邏輯相同時,可以考慮使用模版方法模式。在程式的主框架相同,細節不同的場合下,也比較適合使用這種模式。

模板方法模式通過把不變的行為搬移到超類,去除了子類中的重複**。

子類實現演算法的某些細節,有助於演算法的擴充套件。

通過乙個父類呼叫子類實現的操作,通過子類擴充套件增加新的行為,符合「開放-封閉原則」。

每個不同的實現都需要定義乙個子類,導致類的個數增加,設計更加抽象;

子類的實現也可以影響父類中主邏輯的執行,在靈活的同時,由於子類影響到了父類,違反了黎克特制替換原則,也會給程式帶來風險。這就對抽象類的設計有了更高的要求。

歡迎閱讀本系列文章:head first設計模式之目錄

Head First設計模式之工廠模式

定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個.工廠方法讓類把例項化推遲到子類 1 抽象工廠角色 這是工廠方法模式的核心,它與應用程式無關。是具體工廠角色必須實現的介面或者必須繼承的父類。2 具體工廠角色 它含有和具體業務邏輯有關的 由應用程式呼叫以建立對應的具體產品的物件。3 抽象產品...

《Head First設計模式》之命令模式

命令模式就是將方法呼叫 method invocation 封裝起來。通過封裝方法呼叫,我們可以把運算塊包裝成形,所以呼叫此運算的物件不需要關心事情是如何進行的,只要知道如何使用包裝成形的方法來完成它就可以了。通過封裝方法呼叫,可以用在以下場景 記錄日誌或者重複使用這些封裝來實現撤銷 undo 我對...

Head First設計模式之組合模式

將物件組合成樹形結構來表現 整體 部分 層次結構。組合能讓客戶以一致的方法處理個別物件以及組合物件。主要部分可以被一致對待問題.組合模式主要包含三個角色 2.composite 容器構件 容器節點包含子節點,其子節點可以是葉子節點,也可以是容器節點,它提供乙個集合用於儲存子節點,實現了在抽象構件中定...