設計模式 行為型模式 模板方法

2021-10-18 20:31:04 字數 1459 閱讀 3105

定義乙個操作中的演算法骨架,而將演算法的一些步驟延遲到子類中,使得子類可以不改變該演算法結構的情況下重定義該演算法的某些特定步驟。屬於類行為型模式。

優點封裝了不變部分,拓展可變部分。它把認為是不變部分的演算法封裝到父類中實現,而把可變部分演算法由子類繼承實現,便於子類繼續擴充套件;

在父類中提取了公共的部分**,便於**復用;

部分方法是由子類實現的,因此子類可以通過擴充套件方法增加相應的功能,符合開閉原則。 缺點

對不同的實現都需要定義乙個子類,會導致類的個數增加,系統更加龐大,設計也更加抽象,簡介增加了系統實現的複雜度;

父類中的抽象方法由子類實現,子類執行的結果會影響父類的結果,導致一種反向的控制結構,提高了**閱讀的難度;

由於繼承關係自身的缺點,如果父類增加新的抽象方法,所有的子類都需要改一遍。

主要角色:

模板方法:定義了演算法的骨架,按某種順序呼叫器包含的基本方法;

基本方法:是整個演算法的乙個步驟,

包含2.1 抽象方法(在抽象類中宣告,由具體子類實現)、

2.2 具體方法(在抽象類中已經實現,在具體子類中可以繼承或重寫它)、

2.3 鉤子方法(在抽象類中已經實現,包括用於判斷的邏輯方法和需要子類重寫的空方法兩種)

等型別。

類圖:

**實現:

// 抽象類 

abstract classs abstractclass

public

void

specificmethod()

// 抽象方法

public

abstract

void

abstractmethod()

;public

abstract

void

abstractmethod2()

;}// 具體子類

class

concreteclass

extends

abstractclass

public

void

abstractmethod2()

}// 呼叫客戶端

class

templatepatternclient

}

演算法的整體步驟很固定,但其中個別部分易變時,這時候可以使用模板方法模式,將容易變得部分抽象出來,供子類實現;

當多個子類存在公共的行為時,可以將其提取出來並集中到乙個公共父類中以避免**重複。即先識別**中的不同之處,並將不同之處分離為新的操作,最後用乙個呼叫新的操作的模板方法來替換這些不同的**;

當需要控制子類的擴充套件時,模板方法只在特定點呼叫鉤子操作,這樣就只允許這些點進行擴充套件。

模板方法模式中,基本方法包含: 抽象方法、具體方法和鉤子方法,正確使用「鉤子方法」可以是的子類控制父類的行為。

設計模式 行為型 模板方法模式

定義演算法框架,將一些步驟的實現延遲至子類,就是說把實現某一些功能會有一些重複的共有的步驟,放在公共的類中,將 不同的細節由其子類實現,例如炒菜,都要切菜,放油,和炒菜,但炒不同的菜需要放不同的調味料 定義乙個抽象類,將公共的方法提取出來構建模板方法,不同的則由其子類實現 create by hji...

設計模式 》模板模式(行為型模式)

在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。意圖 定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構...

行為型模式 模板方法

結構圖 模式說明 1.擴充套件點在抽象類abstractclass的實現子類。2.每乙個實現子類實現一種抽象方法的演算法實現,子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。3.客戶端可以替換不同的子類實現。4.定義乙個操作的演算法骨架,而將一些步驟延遲到子類中實現,模板方法使得子類...