ڼС
梦回起点
做你害怕做的事,你会发现:不过如此
本站基于WordPress—主题by 设计窝
冀ICP备15003737号
梦回起点
Copyright © 2015-2024 All rights reserved.

命令模式——大话设计模式读书笔记

命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

下面是命令模式的UML图:

命令模式

下面是C++实现的代码:

/*
 * Copyright (c) 2017 initm.com All rights reserved.
 * 作者: Stupid
 * 描述: 命令模式
 * 完成时间: 2017-11-21 23:08
*/

#include <QCoreApplication>
#include <iostream>
#include <cstdlib>

class Receiver
{
public:
    void Action()
    {
        std::cout << "执行请求!" << std::endl;
    }
};

class Command
{
protected:
    Receiver* receiver;

public:
    Command(Receiver* receiver){
        this->receiver = receiver;
    }
    virtual void Execute() = 0;
};

class ConcreteCommand: public Command
{
public:
    ConcreteCommand(Receiver* receiver): Command(receiver){}
    void Execute()override final{
        receiver->Action();
    }
};

class Invoker
{
private:
    Command* command;

public:
    void SetCommand(Command* command){
        this->command = command;
    }
    void ExecuteCommand(){
        command->Execute();
    }
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    system("chcp 65001");

    Receiver* receiver = new Receiver;
    Command* command = new ConcreteCommand(receiver);
    Invoker* invoker = new Invoker;
    invoker->SetCommand(command);
    invoker->ExecuteCommand();

    return a.exec();
}
2017-11-21
                         
暂无评论

发表回复