設計模式(九)模版方法模式

2021-07-26 14:52:30 字數 2028 閱讀 6822

模版方法模式介紹

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

模版方法模式定義

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

模版方法模式結構圖

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

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

public

abstract

class

abstractswordsman

//使用招式

moves();

//鉤子方法

hook();

} //空實現方法

protected

void hook(){}

protected

abstract

void neigong();

protected

abstract

void weapons();

protected

abstract

void moves();

protected

void meridian()

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

*@return

*/protected

boolean hasweapons()

}

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

定義具體實現類

public

class

zhangwuji

extends

abstractswordsman

@override

protected

void weapons()

@override

protected

void moves()

@override

protected

boolean hasweapons()

}

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

public

class

zhangsanfeng

extends

abstractswordsman

@override

protected

void weapons()

@override

protected

void moves()

@override

protected

void hook()

}

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

客戶端呼叫

public

class client

}

執行結果: 

執行九陽神功 

開通正經與奇經 

使用招式乾坤大挪移 

執行純陽無極功 

開通正經與奇經 

使用真武劍 

使用招式神門十三劍 

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

優點缺點

使用場景

設計模式 九 模版方法模式

設計模式 一 設計六大原則 設計模式 二 單例模式的七種寫法 設計模式 三 建造者模式 設計模式 四 簡單工廠模式 設計模式 五 觀察者模式 設計模式 六 模式 設計模式 七 裝飾模式 設計模式 八 外觀模式 設計模式 九 模版方法模式 設計模式 十 工廠方法模式 設計模式 十一 策略模式 設計模式...

設計模式 模版方法模式

模版方法模式說明 定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模版方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。模版方法模式就是提供了乙個很好的 復用平台,是通過把不變行為搬移到超類,去除子類的重複 來體現它的優勢。下面直接看此模式的簡單模版 抽象模版,定義並實...

設計模式 模版方法模式

模版方法模式 定義一下操作中的演算法骨架,而將一些步驟延遲到子類中。模版方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。模版方法模式結構圖 abstractclass是抽象類,其實也就是一抽象模版,定義並實現了乙個模版方法。這個模版方法一般是乙個具體方法,它給出了乙個頂級邏輯...