码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-06-27 16:31:52      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:设计模式

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

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;
}

执行输出:
技术分享

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

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

标签:设计模式

原文地址:http://blog.csdn.net/u012501459/article/details/46661479

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!