設計模式(二)模板方法模式

2021-09-07 08:28:38 字數 2520 閱讀 9890

1.模版方法模式簡介

模版方法模式介紹

在軟體開發中,有時會遇到類似的情況,某個方法的實現需要多個步驟,其中有些步驟是固定的,而有些步驟並不固定,存在可變性。為了提高**的復用性和系統的靈活性,可以使用模板方法模式來應對這類情況。

模版方法模式定義

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

模版方法模式結構圖

2.模版方法模式的簡單實現

①建立抽象類,定義演算法框架

乙個武俠要戰鬥的時候,也有一套固定的通用模式,那就是執行內功、開通經脈、準備**和使用招式,我們把這些用**表示就是:

1

public

abstract

class

abstractswordsman

12//

使用招式

13moves();

14//

鉤子方法

15hook();16}

17//

空實現方法

18protected

void

hook(){}

19protected

abstract

void

neigong();

20protected

abstract

void

weapons();

21protected

abstract

void

moves();

22protected

void

meridian()

2526/**

27* 是否有**,預設是有**的,鉤子方法

28* @return

29*/

30protected

boolean hasweapons()

33 }

需要注意的是這個抽象類包含了三種型別的方法,分別是抽象方法、具體方法和鉤子方法。抽象方法是交由子類去實現,具體方法則在父類實現了子類公共的方法實現,在上面的例子就是武俠開通經脈的方式都一樣,所以就在具體方法中實現。鉤子方法則分為兩類,第一類是15行,它有乙個空實現的方法,子類可以視情況來決定是否要覆蓋它;第二類則是第9行,這類鉤子方法的返回型別通常是bool型別的,一般用於對某個條件進行判斷,如果條件滿足則執行某一步驟,否則將不執行。

②定義具體實現類

1

public

class

zhangwuji extends abstractswordsman 78

@override

9protected

void

weapons()

1112

@override

13protected

void

moves()

1617

@override

18protected

boolean hasweapons()

21 }

張無忌沒有**所以hasweapons方法返回false,這樣也不會走weapons方法了。

1

public

class

zhangsanfeng extends abstractswordsman 78

@override

9protected

void

weapons()

1213

@override

14protected

void

moves()

1718

@override

19protected

void

hook()

22 }

最後張三丰突然肚子不舒服所以就實現了鉤子方法hook。

③客戶端呼叫

1

public

class

client

8 }

執行結果:

執行九陽神功

開通正經與奇經

使用招式乾坤大挪移

執行純陽無極功

開通正經與奇經

使用真武劍

使用招式神門十三劍

突然肚子不舒服,老夫先去趟廁所

3.模版方法模式的優缺點和使用場景

優點

缺點

使用場景

設計模式(二)模板方法模式

1.模版方法模式簡介 模版方法模式介紹 在軟體開發中,有時會遇到類似的情況,某個方法的實現需要多個步驟,其中有些步驟是固定的,而有些步驟並不固定,存在可變性。為了提高 的復用性和系統的靈活性,可以使用模板方法模式來應對這類情況。模版方法模式定義 定義乙個操作中的演算法框架,而將一些步驟延遲到子類中,...

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

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

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

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