C#设计模式:命令模式(Command Pattern)
一,什么是命令模式(Command Pattern)?
命令模式:将请求封装成命令对象,请求的具体执行由命令接收者执行;
二,如下代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _14.命令模式 { //命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开。 //在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。 class Program { /// <summary> /// 中国人发出命令 /// </summary> /// <param name="args"></param> static void Main(string[] args) { // 初始化Receiver、Invoke和Command Command c = new Command(); c.AddReceiver(new JanReceiver()); c.AddReceiver(new UsaReceiver()); ChineseInvoke i = new ChineseInvoke(c); ////中国人发出命令 i.ExecuteCommand(); } } /// <summary> /// 中国人,负责调用命令对象执行请求 /// </summary> public class ChineseInvoke { public Command _command; public ChineseInvoke(Command command) { this._command = command; } public void ExecuteCommand() { Console.WriteLine("中国人说,该干啥子干啥子去!!"); _command.Action(); } } /// <summary> /// 命令抽象类 /// </summary> public class Command { // 命令执行方法 private List<Receiver> list = new List<Receiver>(); public void AddReceiver(Receiver receiver) { list.Add(receiver); } public void Action() { // 调用接收的方法,因为执行命令的是学生 foreach (var item in list) { item.Execute(); } } } /// <summary> /// 抽象接收者 /// </summary> public abstract class Receiver { public abstract void Execute(); } /// <summary> /// 具体接收者 /// </summary> public class JanReceiver:Receiver { public override void Execute() { Console.WriteLine("日本人吃饭"); } } /// <summary> /// 具体接收者 /// </summary> public class UsaReceiver : Receiver { public override void Execute() { Console.WriteLine("美国人吃饭"); } } }
三,根据命令模式我们分为下面几个角色,
抽象命令 :Command
抽象接收者:Receiver
命令接收者:执行命令(JanReceiver,UsaReceiver)
命令调用者:(ChineseInvoke)
客户端:发送命令
四,在命令模式中,我们将客户端发送的指令封装成一个对象,如我们的吃和睡觉指令,我们将这两个行为以命令的形式包裹在一个对象中,然后传递给命令接受者执行命令,而这里调用者角色与接收者角色之间没有任何依赖关系,调用者实现功能时只需调用ChineseInvoke抽象类的ExecuteCommand方法就可以,实现命令的调用