一句话的概要
将请求封装成对象,支持请求的变化。实现请求者与执行者的解耦操作。
剧情
小明今天很开心,就决定要请客吃饭。让小刚帮忙给酒店订一下餐。
用命令者设计模式,可以分为三块,小明、酒店订餐、小刚。分别封装成对象,则可以完成解耦。
我们下面用命令者模式来构造以上场景。
任务一:创建小刚这个执行者
我们先要创建小刚这个执行者,并且让他有一个订餐的功能。
public class SomeG { public void OrderMeal() { Console.WriteLine("好吧,我去订餐"); } }
任务二:创建酒店订餐这个命令
首先我们先搭建抽象类,然后搭建酒店这个子类
//定义命令抽象类 public abstract class Command { protected SomeG _SomeG; public Command(SomeG g) { this._SomeG = g; } public abstract void Tel(); } //定义酒店 public class Hotel : Command { public Hotel(SomeG g) : base(g) { } public override void Tel() { base._SomeG.OrderMeal(); } }
将命令的构造函数,设置为必须把执行者传进去。然后定义执行方法。
任务三:创建小明这个命令者
最后我们创建小明这个执行命令的人。
public class SomeM { private Command _command; public SomeM(Command com) { this._command = com; } public void Go() { _command.Tel(); } }
任务四:我们串联整个剧情
private static void Main(string[] args) { Console.WriteLine("小明让小刚去酒店订餐"); //定义执行者,小刚 SomeG g = new SomeG(); //定义命令,订餐 Command com = new Hotel(g); //定义命令者,小明 SomeM m = new SomeM(com); //执行命令 m.Go(); Console.ReadLine(); }
总结
命令模式把操作封装成对象,通过命令的抽象话来达到命令者和执行者的解耦操作。
常用场景:行为的请求者与行为的处理者耦合度过高。
选择关键点:请求者是否不需要关心命令的执行只知道接受者。
时间: 2024-10-25 06:13:31