策略模式
所謂策略其實就是做一件事情有很多很多的方法,比如說乙個商場要搞**,**的方式有可能有很多:打折啊,滿100返50啊、積分等等之類的。這種不同的**方式在我們系統中表示就是乙個乙個的策略,並且策略是可以隨時更換的,這個時候在設計系統時就可以使用策略模式。
商場有可能會更換或追加新的**模式,也就是策略存在調整,也就是會更改以前的**,為了滿足開閉原則,這時就要使用抽象類和介面,這裡我們偏向使用介面。在介面裡面定義策略的方法,根據不同的情況編寫不同的實現類,實現不同的策略,策略模式比較適用於演算法經常變化的情況,比如計算工資的方式、出行方式的選擇等等。
如圖所示,我們先定義策略的介面(promotion),然後在這個策略介面裡定義策略的方法(getprice()),接著我們定義了兩種具體的策略(discount打折)和(moneyback返現)。
策略模式會專門有乙個上下文物件(promotioncontext)專門管理策略類,並且上下文物件和策略介面之間是聚合的關係,也就是整體和部分的關係,因此在上下文物件裡應該儲存乙個**型別的引用,另外上下文物件裡一般會有一些方便客戶端呼叫的方法,如getprice()。客戶端程式可以通過上下文物件得到**,這個getprice()裡會根據不同的策略,執行不同的策略方法。
如果客戶端不想使用上下文中定義的預設的策略,也可以去修改策略類,因為上下文中有乙個changepromotion()的方法,客戶端主要使用上下文物件,如果需要修改策略,他還要依賴於具體的策略物件。
示例:1、策略介面:
12、discount打折策略類using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;
5using
system.threading.tasks;67
namespace
策略模式
821 }
13、moneyback返現類using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;
5using
system.threading.tasks;67
namespace
策略模式820
}21 }
14、策略上下文類using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;
5using
system.threading.tasks;67
namespace
策略模式819
}20 }
15、主程式呼叫using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;
5using
system.threading.tasks;67
namespace
策略模式820
21public
double getprice(double
originprice)
2228
return
this
.p.getprice(originprice);29}
3031
///32
///更改策略的方法
33///
34///
35public
void
changepromotion(ipromotion p)
3639
}40 }
1using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;
5using
system.threading.tasks;67
namespace
策略模式822
}23 }
設計模式四 策略模式
策略模式 所謂策略其實就是做一件事情有很多很多的方法,比如說乙個商場要搞 的方式有可能有很多 打折啊,滿100返50啊 積分等等之類的。這種不同的 方式在我們系統中表示就是乙個乙個的策略,並且策略是可以隨時更換的,這個時候在設計系統時就可以使用策略模式。商場有可能會更換或追加新的 模式,也就是策略存...
設計模式之策略模式(四)
策略模式定義 在軟體開發中也常常遇到類似的情況,實現某乙個功能有多種演算法或者策略,我們可以根據環境或者條件的不同選擇不同的演算法或者策略來完成該功能。策略模式 定義一系列的演算法,把每乙個演算法封裝起來,並且使它們可相互替換 策略模式的組成 1 抽象策略角色 strategy 策略類,通常由乙個介...
設計模式 策略設計模式
策略設計模式其實就是多型的使用,父類引用指向子類物件。策略模式的最大特點是使得演算法可以在不影響客戶端的情況下發生變化,從而改變不同的功能。策略模式的缺點其實也很明顯,在於策略模式把每一種具體的策略都封裝成乙個實現類,如果策略有很多的話,很顯然是實現類就會導致過多,顯得臃腫。案列 author de...