新聞中心
在現(xiàn)實生活中常常遇到實現(xiàn)某種目標存在多種策略可供選擇的情況,例如,出行旅游可以乘坐飛機、乘坐火車、騎自行車或自己開私家車等,超市促銷可以釆用打折、送商品、送積分等方法。

成都一家集口碑和實力的網(wǎng)站建設(shè)服務(wù)商,擁有專業(yè)的企業(yè)建站團隊和靠譜的建站技術(shù),10多年企業(yè)及個人網(wǎng)站建設(shè)經(jīng)驗 ,為成都成百上千家客戶提供網(wǎng)頁設(shè)計制作,網(wǎng)站開發(fā),企業(yè)網(wǎng)站制作建設(shè)等服務(wù),包括成都營銷型網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),同時也為不同行業(yè)的客戶提供成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)的服務(wù),包括成都電商型網(wǎng)站制作建設(shè),裝修行業(yè)網(wǎng)站制作建設(shè),傳統(tǒng)機械行業(yè)網(wǎng)站建設(shè),傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設(shè)。在成都做網(wǎng)站,選網(wǎng)站制作建設(shè)服務(wù)商就選創(chuàng)新互聯(lián)建站。
在軟件開發(fā)中也常常遇到類似的情況,當(dāng)實現(xiàn)某一個功能存在多種算法或者策略,我們可以根據(jù)環(huán)境或者條件的不同選擇不同的算法或者策略來完成該功能,如數(shù)據(jù)排序策略有冒泡排序、選擇排序、插入排序、二叉樹排序等。
如果使用多重條件轉(zhuǎn)移語句實現(xiàn)(即硬編碼),不但使條件語句變得很復(fù)雜,而且增加、刪除或更換算法要修改原代碼,不易維護,違背開閉原則。如果采用策略模式就能很好解決該問題。
使用場景
策略模式就是用來封裝算法的,但在實踐中也可以用它來封裝幾乎任何類型的規(guī)則,只要在分析過程中聽到需要在不同時間應(yīng)用不同的業(yè)務(wù)規(guī)則,就可以考慮使用策略模式處理這種變化的可能性。
優(yōu)點
減少了具體的算法和使用算法類之間的耦合 策略模式的 Strategy 類層為 Context 定義了一系列的可供重用的算法或行為,繼承有助于析取這些算法中的公共功能 簡化了單元測試,因為每個算法都有自己的類,可以通過自己的接口單獨測試。
舉例
public class Context
{
private readonly Strategy _strategy;
public Context(Strategy strategy) => _strategy = strategy;
public void Implement()
{
_strategy.AlgorithmImplement();
}
}
public abstract class Strategy
{
public abstract void AlgorithmImplement();
}
public class ConcreteStrategyA : Strategy
{
public override void AlgorithmImplement()
{
Console.WriteLine("算法A實現(xiàn)");
}
}
public class ConcreteStrategyB : Strategy
{
public override void AlgorithmImplement()
{
Console.WriteLine("算法B實現(xiàn)");
}
}
public class ConcreteStrategyC : Strategy
{
public override void AlgorithmImplement()
{
Console.WriteLine("算法C實現(xiàn)");
}
}
More
工廠模式是解耦對象的創(chuàng)建和使用,觀察者模式是解耦觀察者和被觀察者。策略模式跟兩者類似,也能起到解耦的作用,不過,它解耦的是策略的定義、創(chuàng)建、使用這三部分。
策略模式用來解耦策略的定義、創(chuàng)建、使用。實際上,一個完整的策略模式就是由這三個部分組成的。
策略類的定義比較簡單,包含一個策略接口和一組實現(xiàn)這個接口的策略類。
策略的創(chuàng)建由工廠類來完成,封裝策略創(chuàng)建的細節(jié)。
策略模式包含一組策略可選,客戶端代碼如何選擇使用哪個策略,有兩種確定方法:編譯時靜態(tài)確定和運行時動態(tài)確定。其中,“運行時動態(tài)確定”才是策略模式最典型的應(yīng)用場景
如果 if-else 分支判斷不復(fù)雜、代碼不多,這并沒有任何問題,畢竟 if-else 分支判斷幾乎是所有編程語言都會提供的語法,存在即有理由。遵循 KISS 原則,怎么簡單怎么來,就是最好的設(shè)計。非得用策略模式,搞出 n 多類,反倒是一種過度設(shè)計。
策略的創(chuàng)建也可以結(jié)合依賴注入來創(chuàng)建或獲取,靈活使用。
網(wǎng)站題目:詳解策略模式
本文網(wǎng)址:http://www.dlmjj.cn/article/dhiccgj.html


咨詢
建站咨詢
