意图:
将一个请求封装为一个对象,从而使你可用不同个的请求对客户端进行参数化,
对请求排队或记录请求日志,以及支持可撤销的操作.
构成
1.客户角色:创建一个具体命令对象,并确定其接收者.
2.命令角色:声明一个给所有具体命令类的抽象接口.这是一个抽象角色,通常由一个接口或抽象类实现.
(Command角色会维护一个Receiver对象的一个引用,最终是调用Receiver来执行我们的动作)
3.具体命令角色:定义一个接收者和行为之间的弱耦合,实现execute方法,负责调用接收者的相应操作.
4.请求者角色:负责调用命令对象执行请求.
(Invoke角色维护着一个Command对象的引用,然后通过Command去完成相应的动作)
5.接收者角色:负责具体实施和执行一个请求.
如上图:
顾客去饭店订餐,顾客向服务员发出了请求,那么真正去调用这个命令的人,其实是服务员
而不是顾客,顾客只是去生成一个服务员对象而已,服务员再去调用这个命令也就是下单,
但是命令本身它不会自己去执行,必须要有接收者来接收这个命令,最终去执行.那么上图
中很明显服务员发出命令下单,最后命令是由厨师来执行的.厨师就是接收者,由它来真正
完成我们相关的动作.这样的好处在于顾客不必和厨师(接收者)直接打交道,客户的要求最终是厨师
来完成的,客户不需要知道到底是谁为它做的菜,这样的话就隔离了客户端与接收者,使得中
间通过服务员以及这个命令将这个请求封装起来了,实际上点菜这个动作就是一个请求,换句话
说就是一个命令,这个命令包装起来之后交给厨师进行处理.
ClassDiagram:
SequenceDiagram:
class Client
{
static void Main(string[] args)
{
Receiver reciver = new Receiver();
Command command = new ConcreteCommand(reciver);
Invoker invoker = new Invoker();
invoker.SetCommand(command);
invoker.ExcuteCommand();
Console.ReadKey();
}
/// <summary>
/// 请求者
/// </summary>
public class Invoker
{
Command command;
public void SetCommand(Command command)
{
this.command = command;
}
public void ExcuteCommand()
{
command.Execute();
}
}
/// <summary>
/// 接收者
/// </summary>
public class Receiver
{
public void Action()
{
Console.WriteLine("Receiver Executed");
}
}
/// <summary>
/// 命令角色
/// </summary>
public abstract class Command
{
protected Receiver receiver;
public Command(Receiver receiver)
{
this.receiver = receiver;
}
public abstract void Execute();
}
/// <summary>
/// 具体的命令角色
/// </summary>
public class ConcreteCommand : Command
{
public ConcreteCommand(Receiver receiver)
: base(receiver)
{
}
public override void Execute()
{
receiver.Action();
}
}
}
- 大小: 8.5 KB
- 大小: 6.4 KB
- 大小: 45.1 KB
分享到:
相关推荐
用java实现命令模式。展现命令模式类与类之间的继承,依赖关系。
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
业务层框架 —— Command Pattern指南.mht业务层框架 —— Command Pattern指南.mht
CommandPattern)管理智能家电最终代码共4页.pdf.zip
CommandPattern)管理智能家电最终代码共4页.pdf.zip
用最简单的例子理解命令模式(Command Pattern) 命令模式的需求源自想通过一个指令(比如这里IControl的Execute方法)来控制多个类的多个方法,包含了几个要素: 1、命令:让类的各种方法抽象成类实现一个接口 2、...
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
Head First 设计模式 (六) 命令模式(Command pattern) C++实现
主要介绍了C#命令模式(Command Pattern),以实例的形式讲述了命令模式通过一个指令来控制多个类的多个方法,需要的朋友可以参考下
jar包,官方版本,自测可用
jar包,官方版本,自测可用
jar包,官方版本,自测可用
jar包,官方版本,自测可用
命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf命令模式(Command Pattern).pdf
CommandPattern:在Java中实现命令模式
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”...《设计模式》]Command模式结构图如下:图1Command模式结构图Command模式将一个请求
flutter_command_pattern_demo flutter_command_pattern_demo 入门 该项目是Flutter应用程序的起点。 如果这是您的第一个Flutter项目,那么有一些资源可以帮助您入门: 要获得Flutter入门方面的帮助,请查看我们的...