C#敕令形式(Command Pattern)實例教程。本站提示廣大學習愛好者:(C#敕令形式(Command Pattern)實例教程)文章只能為提供參考,不一定能成為您想要的結果。以下是C#敕令形式(Command Pattern)實例教程正文
本文以實例情勢講述了C#敕令形式的完成辦法,分享給年夜家供年夜家參考。詳細完成辦法以下:
現假定想讓遙控器掌握電燈的開關、電視機的開關和切換,該若何做?
一切的開、關、切換都是遙控器收回的指令,把這些指令同一籠統成一個接口。
public interface IControl { void Execute(); }
把電燈、電視機籠統成類。
public class Tv { public void TurnOn() { Console.WriteLine("電視機翻開了"); } public void TurnOff() { Console.WriteLine("電視機封閉了"); } public void SwitchChannel() { Console.WriteLine("電視機切換頻道"); } } public class Light { public void TunrOn() { Console.WriteLine("電燈翻開了"); } public void TurnOff() { Console.WriteLine("電燈封閉了"); } }
Tv類的TurnOn(),TurnOff(),SwitchChannel(),Light類的TurnOn(),TurnOff(),這些辦法都邑經由過程履行IController的Execute辦法被觸發。把每種舉措籠統成類,並完成IControl接口。
public class LighOn : IControl { private Light _light; public LighOn(Light light) { _light = light; } public void Execute() { _light.TunrOn(); } } public class LightOff : IControl { private Light _light; public LightOff(Light light) { _light = light; } public void Execute() { _light.TurnOff(); } } public class TvOn : IControl { private Tv _tv; public TvOn(Tv tv) { _tv = tv; } public void Execute() { _tv.TurnOn(); } } public class TvOff : IControl { private Tv _tv; public TvOff(Tv tv) { _tv = tv; } public void Execute() { _tv.TurnOff(); } } public class TvSwitch : IControl { private Tv _tv; public TvSwitch(Tv tv) { _tv = tv; } public void Execute() { _tv.SwitchChannel(); } }
如今,電視機和電燈有了,觸發各類舉措的類有了,遙控器該裝下這些指令(供給裝下指令的辦法)並供給辦法供客戶端挪用。
public class RemoteControl { private IList<IControl> onCommands = new List<IControl>(); private IList<IControl> offCommands = new List<IControl>(); private IList<IControl> switchCommands = new List<IControl>(); public void AddOnCommand(IControl control) { onCommands.Add(control); } public void AddOffCommand(IControl control) { offCommands.Add(control); } public void AddSwitchCommand(IControl control) { switchCommands.Add(control); } public void PressOnButton(int number) { onCommands[number].Execute(); } public void PressOffButton(int number) { offCommands[number].Execute(); } public void PressSwitchButton(int number) { switchCommands[number].Execute(); } }
客戶真個履行邏輯年夜致是:把電視機、電燈預備好,把各類指令預備好,拿出遙控器把各類指令收納個中,最初挪用遙控器的辦法履行各類指令。
class Program { static void Main(string[] args) { //敕令的吸收方 Light light = new Light(); Tv tv = new Tv(); //各類敕令 LighOn turnLightOn = new LighOn(light); LightOff turnLightOff = new LightOff(light); TvOn turnTvOn = new TvOn(tv); TvOff turnTvOff = new TvOff(tv); TvSwitch switchTv = new TvSwitch(tv); //RemoteConroller組裝敕令 RemoteControl control = new RemoteControl(); control.AddOnCommand(turnLightOn); control.AddOnCommand(turnTvOn); control.AddOffCommand(turnLightOff); control.AddOffCommand(turnTvOff); control.AddSwitchCommand(switchTv); control.PressOnButton(0); Console.ReadKey(); } }
總結:敕令形式的需求源自想經由過程一個指令(好比這裡IControl的Execute辦法)來掌握多個類的多個辦法,包括了幾個要素:
1、敕令:讓類的各類辦法籠統成類完成一個接口
2、拆卸敕令:把各類敕令放到一個聚集中
3、觸發敕令:供給辦法挪用敕令聚集中的某條敕令,讓其履行指令
信任本文所述對年夜家C#法式設計的進修有必定的贊助自創價值。