天津地区网站建设,wordpress get_the_excerpt,西安建设工程信息网诚信平台,天津专业网站制作设计命令模式#xff08;Command Pattern#xff09;是一种行为设计模式#xff0c;它将一个请求封装为一个对象#xff0c;从而使你可以用不同的请求对客户进行参数化#xff0c;对请求排队或记录请求日志#xff0c;以及支持可撤销的操作。
命令模式主要包含以下几个角色Command Pattern是一种行为设计模式它将一个请求封装为一个对象从而使你可以用不同的请求对客户进行参数化对请求排队或记录请求日志以及支持可撤销的操作。
命令模式主要包含以下几个角色
Command抽象命令类声明执行操作的接口。ConcreteCommand具体命令类是一个具体的命令将一个接收者对象绑定于一个动作调用接收者相应的操作以实现Execute。Invoker调用者要求该命令执行这个请求。Receiver接收者知道如何实施与执行一个请求相关的操作。
命令模式的主要优点是
降低系统的耦合度。新的命令可以很容易地加入到系统中。 命令模式适用于以下场景支持撤销的操作。支持修改、排队或者追踪请求。如果一个请求的接收者不明确或者一个请求需要被多个对象处理。用于处理一系列请求可以进行批处理。
以下是一个简单的C实现的命令模式Command Pattern示例
#include iostream// 抽象命令类
class Command {
public:virtual void execute() 0;virtual ~Command() {}
};// 接收者类
class Receiver {
public:void action() {std::cout Receiver action... std::endl;}
};// 具体命令类
class ConcreteCommand : public Command {
public:ConcreteCommand(Receiver* receiver) : receiver_(receiver) {}void execute() override {receiver_-action();}private:Receiver* receiver_;
};// 调用者类
class Invoker {
public:Invoker(Command* command) : command_(command) {}void call() {command_-execute();}private:Command* command_;
};int main() {Receiver* receiver new Receiver();Command* command new ConcreteCommand(receiver);Invoker* invoker new Invoker(command);invoker-call();delete invoker;delete command;delete receiver;return 0;
}在这个例子中Command是抽象命令类定义了一个execute接口。ConcreteCommand是具体命令类实现了execute接口。 Receiver是接收者类它知道如何实施和执行一个请求相关的操作。在ConcreteCommand的execute接口中调用了Receiver的action接口。 Invoker是调用者类它要求命令执行一个请求也就是调用命令的execute接口。 通过这种方式我们可以将一个请求封装为一个对象从而使你可以用不同的请求对客户进行参数化对请求排队或记录请求日志以及支持可撤销的操作。