国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#命令模式(Command Pattern)實例教程

2020-01-24 02:25:23
字體:
來源:轉載
供稿:網友

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 观塘区| 乌海市| 历史| 威海市| 法库县| 江口县| 兴宁市| 镇赉县| 揭西县| 连山| 惠安县| 四平市| 康乐县| 瓦房店市| 溧水县| 武鸣县| 行唐县| 凤城市| 新民市| 青海省| 长顺县| 五莲县| 毕节市| 合水县| 临邑县| 荃湾区| 阳信县| 淮滨县| 湟中县| 延边| 鞍山市| 锦州市| 岢岚县| 昌图县| 米泉市| 富顺县| 葫芦岛市| 商水县| 张家界市| 旅游| 嘉荫县|