本文以實例形式講述了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#程序設計的學習有一定的幫助借鑒價值。
新聞熱點
疑難解答