美文网首页设计模式C++实现笔记
Command 命令模式(行为模式)

Command 命令模式(行为模式)

作者: lixin_karl | 来源:发表于2019-03-01 16:55 被阅读0次

介绍

  命令模式:将请求封装成对象,以便使用不同的请求、日志、队列等来参数化其他对象。命令模式也支持撤销操作。

参与者

  • Command 声明执行操作的接口。
  • ConcreteCommand 将一个接受者对象 绑定一个动作,调用接收着相应的操作,以实现excute。
  • Client 创建一个具体命令并设定它的接收者。
  • Invoker 存储具体的命令,执行用户的请求。
  • Receiver 知道如何执行请求,就是实际的操作。

代码

class ReceiverA {//Receiver
public:
    void  doSomthing() {
        std::cout<<"DO A"<<std::endl;
    }
};

class ReceiverB {//Receiver
public:
    void  doSomthing() {
        std::cout<<"DO B"<<std::endl;
    }
};


class ICommand{//命令对象基类 Command
public:
    virtual ~ICommand(){}
    virtual void Execute() = 0;
};

class CommandA : public  ICommand{//ConcreteCommand 
public:
    explicit CommandA(ReceiverA *a):rec(a){}
    void Execute() override {
        rec->doSomthing();
    }
private:
    ReceiverA *rec;
};
class CommandB : public  ICommand{//ConcreteCommand 
public:
    explicit CommandB(ReceiverB *a):rec(a){}
    void Execute() override {
        rec->doSomthing();
    }
private:
    ReceiverB *rec;
};


class Invoker{//Invoker
public:
    void Add(int index,ICommand *cmd){
        command_m.insert(std::make_pair(index,cmd));
    }
    void Remove(int index){
        command_m.erase(index);
    }
    void DoCmd(int i){
        auto it = command_m.find(i);
        if(command_m.end() != it)
        {
            it->second->Execute();
        }
    }
private:
    std::map<int,ICommand *> command_m;
};

int main()//Client
{
    Invoker invoker;
    ICommand *cmd1 = new CommandA(new ReceiverA);
    ICommand *cmd2 = new CommandB(new ReceiverB);
    invoker.Add(1,cmd1);
    invoker.Add(2,cmd2);
    invoker.DoCmd(2);
    invoker.DoCmd(1);
    invoker.DoCmd(4);
    invoker.DoCmd(2);
}

输出

DO B
DO A
DO B

特点

  • 将调用命令的对象与和如何实现命令的对象解耦
  • 增加新的Command很容易

参考

相关文章

  • Command模式

    命令模式(Command) 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Tran...

  • iOS模式设计之--行为型: 9、命令模式(Command)

    iOS模式设计之--行为型: 9、命令模式(Command)

  • 命令模式(Command)

    本文参考自:《JAVA设计模式》之命令模式(Command) 1. 作用 命令模式属于对象的行为模式。命令模式又称...

  • 8.命令模式 命令模式即Command模式,此模式通过被称为Command的类封装了对目标对象的调用行为以及调用参...

  • 设计模式-命令模式

    命令模式 介绍: 模式模式(Command Pattern),是行为型设计模式之一。命令模式相对于其他的设计模式来...

  • 设计模式[18]-命令模式-Comand Pattern

    1.命令模式简介 命令模式(Command Pattern)模式是是行为型(Behavioral)设计模式,将一个...

  • Command 命令模式(行为模式)

    介绍   命令模式:将请求封装成对象,以便使用不同的请求、日志、队列等来参数化其他对象。命令模式也支持撤销操作。 ...

  • Swift设计模式——命令模式

    什么是命令模式? 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令...

  • Jtro的技术分享:游戏模式之命令模式

    命令模式命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹...

  • 《JAVA与模式》之命令模式

    在阎宏博士的《JAVA与模式》一书中开头是这样描述命令(Command)模式的: 命令模式属于对象的行为模式。命令...

网友评论

    本文标题:Command 命令模式(行为模式)

    本文链接:https://www.haomeiwen.com/subject/jlnduqtx.html