深圳網(wǎng)站建設(shè)公司哪家專業(yè)今日國內(nèi)新聞10則
🚀簡(jiǎn)介
🐤作為一個(gè)開發(fā)人員,開發(fā)需要選擇一款開發(fā)工具,如在編寫C#時(shí),我們可以選擇VisualStudio進(jìn)行開發(fā),也可以使用Rider 進(jìn)行開發(fā)。
🐳該模式定義了一系列算法,并將每個(gè)算法封裝起來,使它們可以相互替換,且算法的變化不會(huì)影響使用算法的客戶。策略模式屬于對(duì)象行為模式,它通過對(duì)算法進(jìn)行封裝,把使用算法的責(zé)任和算法的實(shí)現(xiàn)分割開來,并委派給不同的對(duì)象對(duì)這些算法進(jìn)行管理。
👻策略模式的主要角色如下:
- 抽象策略(Strategy)類:這是一個(gè)抽象角色,通常由一個(gè)接口或抽象類實(shí)現(xiàn)。此角色給出所有的具體策略類所需的接口。
- 具體策略(Concrete Strategy)類:實(shí)現(xiàn)了抽象策略定義的接口,提供具體算法實(shí)現(xiàn)或行為
- 環(huán)境(Context)類:持有一個(gè)策略類的引用,最終給客戶端調(diào)用。
🚀案例
我們通過一個(gè)活動(dòng)策劃來舉例策略模式,如商城中的店鋪搞促銷活動(dòng),有時(shí)活動(dòng)是買一送一,有時(shí)候是全場(chǎng)八折。
🐤抽象策略類(活動(dòng)共同的接口)
public interface IStrategy
{void show();
}
🐤具體策略角色,對(duì)策略類進(jìn)行活動(dòng)A“買一送一”,活動(dòng)B“全場(chǎng)八折”的具體實(shí)現(xiàn)
public class StrategyA : IStrategy
{public void show(){Console.WriteLine("買一送一");}
}public class StrategyB : IStrategy
{public void show(){Console.WriteLine("全場(chǎng)8折!");}
}
🐤定義環(huán)境角色( Context ):用于連接上下文
Context類有一個(gè)構(gòu)造函數(shù),接受一個(gè)IStrategy類型的參數(shù),用于初始化_strategy成員變量,然后根據(jù)傳遞給這個(gè)對(duì)象的具體策略對(duì)象,執(zhí)行相應(yīng)的行為。這樣,我們可以在運(yùn)行時(shí)改變Context對(duì)象的行為,只需要傳遞不同的策略對(duì)象即可。
public class Context
{private IStrategy _strategy;public Context(IStrategy strategy){_strategy = strategy;}public void salesManShow(){_strategy.show();}
}
🐤測(cè)試類
class MyClass
{public static void Main(string[] args){var contextA = new Context(new StrategyA());contextA.salesManShow();var contextB = new Context(new StrategyB());contextB.salesManShow();}
}
運(yùn)行結(jié)果!
🚀優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 策略類之間可以自由切換由于策略類都實(shí)現(xiàn)同一個(gè)接口,所以使它們之間可以自由切換。
- 易于擴(kuò)展,增加一個(gè)新的策略只需要添加一個(gè)具體的策略類即可,基本不需要改變?cè)械拇a,符合“開閉原則“
- 避免使用多重條件選擇語句(if else),充分體現(xiàn)面向?qū)ο笤O(shè)計(jì)思想。
缺點(diǎn):
- 客戶端必須知道所有的策略類,并自行決定使用哪一個(gè)策略類。
- 策略模式將造成產(chǎn)生很多策略類,可以通過使用享元模式在一定程度上減少對(duì)象的數(shù)量。
使用場(chǎng)景
- 一個(gè)系統(tǒng)需要?jiǎng)討B(tài)地在幾種算法中選擇一種時(shí),可將每個(gè)算法封裝到策略類中。
- 一個(gè)類定義了多種行為,并且這些行為在這個(gè)類的操作中以多個(gè)條件語句的形式出現(xiàn),可將每個(gè)條件分支移入它們各自的策略類中以代替這些條件語句。
- 系統(tǒng)中各算法彼此完全獨(dú)立,且要求對(duì)客戶隱藏具體算法的實(shí)現(xiàn)細(xì)節(jié)時(shí)。
- 系統(tǒng)要求使用算法的客戶不應(yīng)該知道其操作的數(shù)據(jù)時(shí),可使用策略模式來隱藏與算法相關(guān)的數(shù)據(jù)結(jié)構(gòu)。
- 多個(gè)類只區(qū)別在表現(xiàn)行為不同,可以使用策略模式,在運(yùn)行時(shí)動(dòng)態(tài)選擇具體要執(zhí)行的行為。