策略模式(strategy):他定義了演算法家族,分別封裝起來,讓他們之間可以相互替換,此模式讓演算法的變化,不會影響到演算法的客戶端。當有一組演算法完成的都是相同的工作,只是實現不同,以相同的方式呼叫所有的演算法。在這種情況下可以使用策略模式,可減少各類演算法類與使用演算法類之間的耦合。
這邊就以簡單的數字加減舉例。
1這樣寫的化,在後期**擴充套件*或者/的時候,就需要新增新的if 判斷,**臃腫且擴充套件性低。static
class
calculate
2 else
if (symbol ==subtract)
1316
17return
result;18}
19 }
如果使用策略模式,將各類運算歸結到不同的策略中,會有很強的擴充套件性。那下面看下該模式。
策略模式結構圖:
組成:
1.抽象策略角色(straetegy):這是乙個抽象類,通常情況下使用介面或抽像類去實現。
2.具體策略角色(concretestrategya....):包裝了具體的演算法和行為。也就是實現 抽象策略角色 介面的實現類。
3.環境角色(context):持有乙個抽象角色的引用,給客戶端呼叫。
結構圖的實現:
strategy 類,定義所有支援的演算法和公共介面:
1concretestrategy,封裝了具體的演算法或行為,繼承於strategy.abstract
class
strategy
2
1context,用乙個concretestrategy來配置,維護乙個對strategy物件的引用。//具體演算法a
2class
concretestrategya : strategy38
}910//
具體演算法b
11class
concretestrategyb : strategy
1217}18
19//
具體演算法 c
20class
concretestrategyc : strategy
2126 }
//客戶端**上下文class
context
//上下文
public
void
contextinte***ce()
}
1了解了策略模式,那改寫一下上面的加減演算法吧。static
void main(string
args)
2
1客戶端這樣呼叫就可以了//定義抽象類介面
2public
inte***ce
icalculator36
7//加減的實現
8public
class
add : icalculator914
}1516public
class
sub : icalculator
1722}23
24//
上下文25
public
class
clccontext
2633
34public
double clc(double a, double
b)35
38 }
1如果後期在加乘法的擴充套件就會方便很多,新增類繼承即可。static
void main(string
args)
2
策略模式還可以於 簡單過程模式 結合,使**的耦合度更加降低。
設計模式 二 策略模式
定義演算法家族,分別封裝起來,讓它們之間可以互相替換,讓演算法變化,不會影響到使用者 good 適合類中的成員以方法為主,演算法經常變動 簡化了單元測試 因為每個演算法都有自己的類,可以通過自己的介面單獨測試。策略模式和簡單工廠基本相同,但簡單工廠模式只能解決物件建立問題,對於經常變動的演算法應使用...
設計模式(二) 策略模式
策略模式 strategy 它定義了乙個演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。現金收費抽象類 abstract class cashsuper 正常收費子類 class cashnormal cashsuper 打折收費子類 class ...
設計模式(二) 策略模式
策略模式定義了演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。我們來實現乙個簡單的商場收銀軟體功能來闡述策略模式 1.我們先來定義乙個收費方式的基類,如下 using system namespace strategy 2.收費方案,如下 usin...