本文以实例形式讲述了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#程序设计的学习有一定的帮助借鉴价值。
本文向大家介绍C#命令模式用法实例,包括了C#命令模式用法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#命令模式。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。
模式定义 将一个请求(行为)封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排日志,以及支持可撤销的操作。 class Command { public: virtual void execute() = 0; }; class ConcreteCommand1 : public Command { string arg; public: ConcreteCommand1(co
本文向大家介绍C#单例模式(Singleton Pattern)实例教程,包括了C#单例模式(Singleton Pattern)实例教程的使用技巧和注意事项,需要的朋友参考一下 本文以实例形式讲述了C#单例模式(Singleton Pattern)的实现方法,分享给大家供大家参考。具体实现方法如下: 一般来说,当从应用程序全局的角度来看,如果只允许类的一个实例产生,就可以考虑单例模式。 1.即时
本文向大家介绍C#复合模式(Composite Pattern)实例教程,包括了C#复合模式(Composite Pattern)实例教程的使用技巧和注意事项,需要的朋友参考一下 本文以一个简单实例的形式讲述了C#复合模式。分享给大家供大家参考。具体实现方法如下: 一般在显示树形结构时,复合模式有很好的体现。本文实例显示如下部门结构: 如上图所示,有的节点包含子节点,有的节点不包含子节点。不管是什
本文向大家介绍C#策略模式(Strategy Pattern)实例教程,包括了C#策略模式(Strategy Pattern)实例教程的使用技巧和注意事项,需要的朋友参考一下 本文以一个简单的实例来说明C#策略模式的实现方法,分享给大家供大家参考。具体实现方法如下: 一般来说,当一个动作有多种实现方法,在实际使用时,需要根据不同情况选择某个方法执行动作,就可以考虑使用策略模式。 把动作抽象成接口,
本文向大家介绍C++设计模式之命令模式,包括了C++设计模式之命令模式的使用技巧和注意事项,需要的朋友参考一下 前言 又要过年了,又是一个抢票季;从大学起,到现在工作,一直都是在外地,离家千里;以前买票,曾经也去火车站通宵排队买票;直到12306的腾空出现,在电脑前不停止的点着鼠标刷票,那个时候12306很是脆弱,抢一张票更是难上加难;现在好了,慢慢强大的12306,买票时出现了一个排队系统,先买