C#命令模式(CommandPattern)实例教程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C#命令模式(CommandPattern)实例教程
本⽂以实例形式讲述了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#程序设计的学习有⼀定的帮助借鉴价值。

相关文档
最新文档