意图:
将一个请求封装为一个对象,从而使你可用不同个的请求对客户端进行参数化,
对请求排队或记录请求日志,以及支持可撤销的操作.
构成
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
分享到:
相关推荐
命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列请求,或者支持可撤销的操作。在Java中实现命令模式,我们可以利用面向对象编程的特性来构建系统,使得...
1. **命令接口(Command Interface)**:定义了所有命令对象通用的方法,例如 `execute()` 方法,用于执行请求。 2. **具体命令(Concrete Command)**:实现了命令接口,知道如何接收请求并执行操作。它将接收者...
在这个"CommandPattern)管理智能家电最终代码共4页.pdf.zip"文件中,我们可以期待看到如何在实际的智能家电控制系统中应用这种设计模式。 在智能家电的场景中,命令模式可以被用来处理各种家电设备的控制指令。例如...
业务层框架 —— Command Pattern指南.mht业务层框架 —— Command Pattern指南.mht
命令模式(Command Pattern)是一种行为型设计模式,它将请求封装为对象,从而使您可以使用不同的请求、队列请求或日志请求,并支持可撤销操作。命令模式通常用于实现操作的解耦,使得发送者和接收者之间不直接关联...
**命令模式(Command Pattern)详解** 命令模式是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。在这个场景中,我们关注的是如何利用命令模式...
### 命令模式(Command Pattern) #### 概述 命令模式是一种行为设计模式,它将请求封装成对象,以便使用不同的请求对客户端进行参数化。该模式有助于将发送请求的对象与执行请求的对象解耦。 #### 核心概念 在...
用最简单的例子理解命令模式(Command Pattern) 命令模式的需求源自想通过一个指令(比如这里IControl的Execute方法)来控制多个类的多个方法,包含了几个要素: 1、命令:让类的各种方法抽象成类实现一个接口 2、...
jar包,官方版本,自测可用
jar包,官方版本,自测可用
jar包,官方版本,自测可用
jar包,官方版本,自测可用
调用者通过`AddOnCommand`、`AddOffCommand`和`AddSwitchCommand`方法来添加相应的命令对象,这样就可以在后续调用`ExecuteCommand`时执行对应的命令。 这样的设计使得遥控器(调用者)无需知道每个操作的具体实现...
void setCommand(Command* cmd) { command = cmd; } void invoke() { command->execute(); } }; ``` 在这个例子中,`ConcreteCommand1`和`ConcreteCommand2`实现了`Command`接口,它们分别对应接收者`Receiver`的...
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”...《设计模式》]Command模式结构图如下:图1Command模式结构图Command模式将一个请求
flutter_command_pattern_demo flutter_command_pattern_demo 入门 该项目是Flutter应用程序的起点。 如果这是您的第一个Flutter项目,那么有一些资源可以帮助您入门: 要获得Flutter入门方面的帮助,请查看我们的...
12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN ...