設計模式 模板方法模式

2021-09-19 18:17:48 字數 2107 閱讀 9229

1.模板方法模式

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

2.uml類圖

模板方法模式包括兩種角色:

● 抽象模板:抽象模板是乙個抽象類。抽象模板定義了若干個方法以表示乙個演算法的各個步驟,這些方法中有抽象方法也有非抽象方法,其中的抽象方法稱作原語操作。重要的一點是,抽象模板中還定義了乙個稱作模板方法的方法,該方法不僅包含有抽象模板中表示演算法步驟的方法呼叫,而且也可以包含有定義在抽象模板中的其他物件的方法呼叫,即模板方法定義了演算法骨架。

● 具體模板:具體模板是抽象模板的子類,實現抽象模板中的原語操作。

通過使用模板方法模式,可以將一些複雜流程的實現步驟封裝在一系列基本方法中,在抽象父類中提供乙個稱之為模板方法的方法來定義這些基本方法的執行次序,而通過其子類來覆蓋某些步驟,從而使得相同的演算法框架可以有不同的執行結果。模板方法模式提供了乙個模板方法來定義演算法框架,而某些具體步驟的實現可以在其子類中完成。

3.舉例

//抽象模板

public abstract class abstracttemplate

}

具體模板

public class concretetemplate1 extends abstracttemplate 

@override

public void primitiveoperation2()

@override

public void templatemethod()

}

public class concretetemplate2 extends abstracttemplate 

@override

public void primitiveoperation2()

@override

public void templatemethod()

}

模式使用

4.鉤子方法模板方法既可以包含抽象方法的呼叫也可以包含具體方法的呼叫。具體模板必須重寫抽象模板中的抽象方法,但是對於抽象模板中的具體方法,具體模板可以選擇直接繼承或重寫這個具體方法。鉤子方法是抽象模板中定義的具體方法,但給出了空實現或缺省的實現,如果抽象模板不希望其中的具體方法是鉤子方法,就需要將該具體方法用final修飾,要求子類必須繼承該具體方法,不能重寫。某些鉤子方法的作用是對模板方法中的某些步驟進行掛鉤,以確定在什麼條件下執行模板方法中的哪些演算法步驟。

5.適用場景

設計者需要給出乙個演算法的固定步驟,並將某些步驟的具體實現留給子類來實現

需要對**進行重構,將各個子類公共行為提取出來集中到乙個共同的父類中以避免**重複

總結

模板方法模式優點:

在父類中形式化地定義乙個演算法,而由它的子類來實現細節的處理,在子類實現詳細的處理演算法時並不會改變演算法中步驟的執行次序。

模板方法模式是一種**復用技術,它在類庫設計中尤為重要,它提取了類庫中的公共行為,將公共行為放在父類中,而通過其子類來實現不同的行為,它鼓勵我們恰當使用繼承來實現**復用。

可實現一種反向控制結構,通過子類覆蓋父類的鉤子方法來決定某一特定步驟是否需要執行。

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

模板方法模式缺點:

需要為每乙個基本方法的不同實現提供乙個子類,如果父類中可變的基本方法太多,將會導致類的個數增加,系統更加龐大,設計也更加抽象,此時,可結合橋接模式來進行設計。

參考:

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

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

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

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

設計模式 模板方法模式

模板方法模式 類庫中大量使用,例如idbconnection介面 dbconnection抽象類 派生的sqlconnection和派生的oledbconnection就是使用了這種方法 1。介面,到能做的定義進來。一種規範 2.把共同的部分進去分離出來,放到乙個抽象的父類去實現.3.子類中實現 不...