设计模式之十九:命令模式(Command)

命令模式:将一个请求封装成一个对象,从而允许用不同的请求参数化客户,对请求进行排序或记录日志,并且支持撤销操作。

UML图:

主要包括:

  1. Command:声明了一个操作的接口
  2. ConcreteCommand:绑定了一个Receiver和一个行为,通过相关联的Receiver对象实现了了execute方法。
  3. Client:创建一个ConcreteCommand对象并且设置了它的Receiver。
  4. invoker:要求命令执行请求。
  5. Receiver:知道如何实施与执行请求相关的操作。

命令模式的核心就是从业务模型中寻找到对应的Command,ConcreteCommand,invoker,Receiver。它将行为的实现者(Receiver)和行为的请求者(invoker)分离开来,通过增加一层抽象类Command实现了面向接口编程。基本的C++代码如下:

#include <iostream>

using namespace std;

class Receiver
{
    public:
    void action()
    {
        cout<<"real action1"<<endl;
    }
};

class Command
{
    public:
    Command(Receiver* r)
    {
        receiver=r;
    }
    virtual void execute()=0;

    protected:
    Receiver * receiver;
};

class ConcreteCommand:public Command
{
    public:
    ConcreteCommand(Receiver * r):Command(r)
    {

    }
    void execute()
    {
        receiver->action();
    }
};

class Invoker
{
    public:
    void setCommand(Command * c)
    {
        command=c;
    }
    void execute()
    {
        command->execute();
    }

    private:
    Command* command;
};

int main()
{
    cout<<"命令模式基本代码"<<endl;
    Receiver * r=new Receiver();
    Command * c=new ConcreteCommand(r);

    Invoker * invoker=new Invoker();
    invoker->setCommand(c);
    invoker->execute();

    delete r;
    delete c;
    delete invoker;

    return 0;
}

执行输出:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-30 02:25:14

设计模式之十九:命令模式(Command)的相关文章

C#设计模式之十九策略模式(Stragety Pattern)【行为型】

原文:C#设计模式之十九策略模式(Stragety Pattern)[行为型] 一.引言 今天我们开始讲"行为型"设计模式的第七个模式,该模式是[策略模式],英文名称是:Stragety Pattern.在现实生活中,策略模式的例子也非常常见,例如,在一个公司中,会有各种工作人员,比如:有的是普通员工,有的是软件架构师,有的是部门经理,当然也会有公司的CEO.这些工作人员负责的工作不同,担负的责任不同,自然得到的报酬也就不同了.每种工作人员都有自己的工资,但是每个工种的工作人员的工资的

设计模式(行为型)之命令模式(Command Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(行为型)之策略模式(Strategy Pattern)>http://blog.csdn.net/yanbober/article/details/45498567 概述 在软件开发中,我们经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收

设计模式(十四):Command命令模式 -- 行为型模式

1.概述 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活. 例子1:电视机遥控器 : 遥控器是请求的发送者,电视机是请求的接收者,遥控器上有一些按钮如开,关,换频道等按钮就是具体命令,不同的按钮对应电视机的不同操作. 2.问题 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧

云计算设计模式(十九)——运行重构模式

云计算设计模式(十九)——运行重构模式 设计应用程序,使得它可以在不需要重新部署或者重新启动应用程序重新配置.这有助于保持可用性并减少停机时间. 背景和问题 一个主要目的为重要的应用,如商业和企业网站是尽量减少停机时间以及由此引发的中断给客户和用户.但是,有时有必要重新配置应用程序改变特定行为或设置,而在部署和使用.因此,它是用于该应用程序被设计成这样一种方式,以允许在运行时要应用这些配置的变化,并为应用程序,以检测所述变化并且尽快地应用它们的部件的优点. 该种要应用可能被调整记录,以协助与应用

设计模式 - 命令模式(command pattern) 具体解释

命令模式(command pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 命令模式(command pattern) : 将请求封装成对象, 以便使用不同的请求\队列\日志来參数化其它对象. 命令模式也能够支持撤销操作. 简单的命令模式的实现: 1. 详细的类, 每个类都有特定的方法: /** * @time 2014年6月9日 */ package command; /** * @author C.L.Wang * */ publ

设计模式 - 命令模式(command pattern) 详解

命令模式(command pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy 命令模式: 将请求封装成对象, 以便使用不同的请求\队列\日志来参数化其他对象. 命令模式也支持可撤销操作. 命令模式: 调用者(Invoker); 命令(Command): 可执行方法(execute), 具体命令(Concrete Command); 接受者(Receiver): 调用命令(Set Command); 具体方法: 1. 具体对象. /** *

设计模式 - 命令模式(command pattern) 多命令 详解

命令模式(command pattern) 多命令 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考命令模式: http://blog.csdn.net/caroline_wendy/article/details/31379977 具体步骤: 1. 多命令, 把未使用的命令, 初始化为空对象(NoCommand), 根据参数(slot), 选择输出命令. /** * @time 2014年6月16日 */ package command; /**

设计模式 - 命令模式(command pattern) 撤销(undo) 详解

命令模式(command pattern) 撤销(undo) 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考命令模式: http://blog.csdn.net/caroline_wendy/article/details/31379977 命令模式可以用于执行撤销(undo)操作. 具体方法: 1. 对象类中需要保存状态, 如level. package command; public class CeilingFan { String loca

设计模式 - 命令模式(command pattern) 宏命令(macro command) 详解

命令模式(command pattern) 宏命令(macro command) 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考: 命名模式(撤销): http://blog.csdn.net/caroline_wendy/article/details/31419101 命令模式可以执行宏命令(macro command), 即多个命令的组合操作. 具体方法:  1. 其余代码与命令(撤销)一致 2. 添加宏命令(macro command),

设计模式 ( 十三 ) 命令模式Command(对象行为型)

设计模式 ( 十三 ) 命令模式Command(对象行为型) 1.概述 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活. 例子1:电视机遥控器 : 遥控器是请求的发送者,电视机是请求的接收者,遥控器上有一些按钮如开,关,换频道等按钮就是具体命令,不同的按钮对应电视机的不同操作. 2.问题