設計模式系列(行為型模式)之一 模板方法模式

2021-10-24 03:58:22 字數 2158 閱讀 3343

模板方法模式定義了乙個流程的骨架,由多個方法組成。並允許子類為乙個或多個步驟提供實現。簡而言之就是公共的不變的部分由父類統一實現,變化的部分由子類來個性化實現。

優點:提高復用性;

提高拓展性;

符合開閉原則。

缺點:類的數目增加;

增加了系統實現的複雜度;

父類新增新的抽象方法,所有子類都要改一遍。

模板方法模式包含以下主要角色。

抽象類(abstract class):負責給出乙個演算法的輪廓和骨架。它由乙個模板方法和若干個基本方法構成。這些方法的定義如下。

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

基本方法:是整個演算法中的乙個步驟,包含以下幾種型別:

抽象方法:在抽象類中申明,由具體子類實現。

具體方法:在抽象類中已經實現,在具體子類中可以繼承或重寫它。

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

具體子類(concrete class):實現抽象類中所定義的抽象方法和鉤子方法,它們是乙個頂級邏輯的乙個組成步驟。

模板方法模式通常適用於以下場景:

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

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

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

1.定義乙個網上購買外賣的抽象類,裡面有支付,下單,製作,配送等主要流程,

其中下單和打包配送行為是固定的,不同的是製作和支付過程,所以order和send方法提供了預設實現,並且由final修飾,子類不可重寫。另外我們還可以通過needother這個鉤子方法來控制某些子類的定製化需求。

public

abstract

class

buy;

protected

abstract

void

make()

;final

void

send()

;protected

boolean

needother()

;final

void

flow()

this

.send()

;}}

2.建立乙個購買蛋糕類,繼承自購買抽象類,由於需要餐具,所以加了needother

public

class

buycake

extends

buy@override

protected

void

pay(

)@override

protected

void

make()

@override

protected

boolean

needother()

}

3.建立乙個購買水果類,繼承自購買抽象類,不需要餐具,可以直接重寫needother返回false,也可以跟上面一樣加個needother屬性

public

class

buyfruit

extends

buy@override

protected

void

make()

@override

protected

boolean

needother()

}

4.測試輸出

public

class

test

}

我支付了30元

下單成功了

製作蛋糕了

需要餐具

打包配送

----

----

----

----

-------

我支付了20元

下單成功了

挑選包裝了

打包配送

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

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

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

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

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

定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。public class template main 模板定義,提供給外部同型別樣式,特殊方法特殊實現 abstract class abstractplay priv...