策略模式比較類似於乙個計算有多種計算過程來獲得結果,我們把每種計算方式封裝為乙個策略,把策略作為可選擇引數來決定使用什麼計算方式。
定義策略介面,表示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 定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。策略模式是一種定義了一系列演算法的方法,從概念上來看,所以得這些演算法完成的都是相同的工作,只是實現不同,它可以以相同的方式呼叫所有的演算法,減少了各...