设计模式-Command(行为模式) 将一个请求封装到一个Command类中,提供一个处理对象Receiver,将Command由Invoker激活。

Posted fourmi_gsj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-Command(行为模式) 将一个请求封装到一个Command类中,提供一个处理对象Receiver,将Command由Invoker激活。相关的知识,希望对你有一定的参考价值。

//方式一

//Reciever.h

#pragma once

class Reciever{
public:
    Reciever();
    ~Reciever();
    void Action();
protected:
private:
};

//Reciever.cpp

#include"Reciever.h"
#include<iostream>

Reciever::Reciever(){}

Reciever::~Reciever(){}
void Reciever::Action()
{
    std::cout << "Reciever action ..." << std::endl;
}

//Command.h

#pragma once

class Reciever;

class Command{
public:
    virtual ~Command();
    virtual void Execute() = 0;
protected:
    Command();
private:
};

class ConcreateCommand :public Command
{
public:
    ConcreateCommand(Reciever* rec);
    ~ConcreateCommand();
    void Execute();
protected:
private:
    Reciever* _rec;
};

//Command.cpp

#include"Command.h"
#include"Reciever.h"
#include<iostream>

Command::Command(){}
Command::~Command(){}
void Command::Execute(){}


ConcreateCommand::ConcreateCommand(Reciever* rec)
{
    _rec = rec;
}
ConcreateCommand::~ConcreateCommand()
{
    delete this->_rec;
}
void ConcreateCommand::Execute()
{
    _rec->Action();
    std::cout << "ConcreateCommand ..." << std::endl;
}

//Invoker.h

class Command;
class Invoker
{
public:
    Invoker(Command* cmd);
    ~Invoker();
    void Invoke();
protected:
private:
    Command* _cmd;
};

//Invoker.cpp

#include"Command.h"
#include"Invoker.h"
#include<iostream>

Invoker::Invoker(Command* cmd)
{
    _cmd = cmd;
}
Invoker::~Invoker()
{
    delete _cmd;
}
void Invoker::Invoke()
{
    _cmd->Execute();
}

//main.cpp

#include"Command.h"
#include"Invoker.h"
#include"Reciever.h"
#include<iostream>
#include<string>

int main(int args, char* argv)
{
    Reciever* rec = new Reciever();
    Command* cmd = new ConcreateCommand(rec);
    Invoker* inv = new Invoker(cmd);
    inv->Invoke();
    getchar();
    return 0;
}

以上是关于设计模式-Command(行为模式) 将一个请求封装到一个Command类中,提供一个处理对象Receiver,将Command由Invoker激活。的主要内容,如果未能解决你的问题,请参考以下文章

设计模式-行为型-命令模式(COMMAND)

Command(命令)-对象行为型模式

设计模式(14)--Command(命令模式)--行为型

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

Java设计模式-命令模式Command

设计模式 命令模式