設計模式之策略模式與模板模式

2021-08-30 15:55:28 字數 2214 閱讀 1645

策略模式比較類似於乙個計算有多種計算過程來獲得結果,我們把每種計算方式封裝為乙個策略,把策略作為可選擇引數來決定使用什麼計算方式。

定義策略介面,表示dofight計算過程。

public

inte***ce

fightstrategy

定義實現策略類,表示各個不同的計算過程。

public

class

xiaoqiangfightstrategy

implements

fightstrategy

}

public

class

xiaomingfightstrategy

implements

fightstrategy

}

定義策略呼叫者,表示使用策略的呼叫方,策略作為引數傳入,並且被呼叫策略的演算法。

public

class

fightstage

}

測試**。

public

class

strategytest

}

上面就是簡單策略模式。

我們都知道,設計模式從來都是為了將**複雜問題簡單化,很多時候都是混合使用的,上面策略模式的**跟模板模式就是很常見的組合。

模板模式也指的是模板方法,常用於某些過程整體的處理邏輯步驟都是一致的,但是在某乙個或者多個步驟可能會存在不同的差異,需要在子類中體現。

例如上面的策略模式中的**,dofight方法的兩個實現方法對比,整體實現過程都是1,2,3,4步驟,1,4步驟一模一樣。但是在2,3,過程可能會有所不同,但是本質是類似的,例如2都是「旋風腿」,3都是「大力掌」,因此策略實現很適合用模板方法。具體實現看**演示。

1.system.out.

println

("問候他");

2.system.out.

println

("小明旋風腿");

3.system.out.

println

("小明大力掌");

4.system.out.

println

("溜了溜了"

);

1.system.out.

println

("問候他");

2.system.out.

println

("小強旋風腿");

3.system.out.

println

("小強大力掌");

4.system.out.

println

("溜了溜了"

);

首先根據總體過程,抽取乙個骨架方法,並且寫作乙個抽象類。

public

abstract

class

abstractfightstrategy

implements

fightstrategy

/** * 差異步驟

*/public

abstract

void

doxuanfengtui()

;/**

* 差異步驟

*/public

abstract

void

dodalizhang()

;}

子類實現差異方法。

public

class

xiaomingfightstrategy

extends

abstractfightstrategy

@override

public

void

dodalizhang()

}

public

class

xiaoqiangfightstrategy

extends

abstractfightstrategy

@override

public

void

dodalizhang()

}

測試方法同上,如此依賴就實現了簡單的模板模式與策略模式的結合。

模板設計模式 設計模式之模板模式

模板模式,通常又叫做模板方法模式,乙個抽象類公開定義了執行方法的模板,它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方法進行,這種型別的設計模式屬於行為型模式。模板模式主要解決將通用的演算法抽象起來,同樣的 邏輯出現了重複,就可以使用模板模式進行重構。關鍵 在抽象類實現,其他步驟在子類實現...

設計模式之策略模式

include using namespace std 飛行行為介面類 class flystrategy 高空飛行行為具現類 class heightfly public flystrategy virtual void fly private heightfly 低空飛行行為具現類 class ...

設計模式之 策略模式

策略模式 strategy pattern 定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。策略模式是一種定義了一系列演算法的方法,從概念上來看,所以得這些演算法完成的都是相同的工作,只是實現不同,它可以以相同的方式呼叫所有的演算法,減少了各...