zoukankan      html  css  js  c++  java
  • 设计模式-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;
    }
  • 相关阅读:
    我的航拍直升机 控制基站软件的编写历程(2.2)——Qt Creator 版本控制系统
    windows下QT开发环境建立方法
    QT 4.5 windows版本 安装问题 及 Junction 使用
    各种平台下编译qt工程
    华为面试题
    strcpy,strncpy,strlcpy,memcpy
    QT/E 更换字体问题
    Linux设备驱动编程中断处理
    oracle数据库连接池的使用
    Windows下QT的安装
  • 原文地址:https://www.cnblogs.com/fourmi/p/12085089.html
Copyright © 2011-2022 走看看