zoukankan      html  css  js  c++  java
  • (十二)命令模式

    1. 定义

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

    2. 命令模式作用

    第一: 比较容易地设计一个命令队列;
    第二: 在需要的情况下, 可以较容易地将命令记入日志;
    第三: 允许接收请求的一方决定是否要否决请求;
    第四: 可以容易地实现对请求的撤销和重做;
    第五: 由于加进新的具体命令类不影响其他的类, 因此增加新的具体命令类很容易;
    第六: 命令模式把请求一个操作的对象与指导怎么执行一个操作的对象分割开.

    3. 示例

    #include <iostream>
    #include <string>
    #include <vector>
    
    class Receiver
    {
    public:
        void Action(){
            std::cout << "action" << std::endl;
        }
    };
    
    class Command
    {
    public:
        virtual void Excute() = 0;
    };
    
    class ConcreteCommand :public Command
    {
    public:
        ConcreteCommand(Receiver* r) :receiver(r){}
        void Excute()override{ receiver->Action(); }
    private:
        Receiver* receiver;
    };
    
    class Invoker
    {
    public:
        void AddCommand(Command* c){
            commands.push_back(c);
        }
    
        void Process(){
            auto iter = commands.begin();
            while (iter != commands.end()){
                (*iter)->Excute();
                iter = commands.erase(iter);
            }
        }
    
    private:
        std::vector<Command*> commands;
    };
    
    void Client()
    {
        Receiver *r = new Receiver();
        Command *c = new ConcreteCommand(r);
        Invoker in;
        in.AddCommand(c);
        in.AddCommand(c);
        in.Process();  // 可放在线程中不断循环,即可不断处理命令
        delete r;
        delete c;
    }
    
    int main()
    {
        Client();
    
        return 0;
    }
    

  • 相关阅读:
    海量数据面试题整理
    JConsole操作手册
    JVM调优总结(十二)-参考资料
    JVM调优总结(十一)-反思
    JVM调优总结(十)-调优方法
    JVM调优总结(八)-典型配置举例2
    JVM调优总结(九)-新一代的垃圾回收算法
    JVM调优总结(七)-典型配置举例1
    JVM调优总结(五)-分代垃圾回收详述1
    JVM调优总结(六)-分代垃圾回收详述2
  • 原文地址:https://www.cnblogs.com/walkinginthesun/p/9556456.html
Copyright © 2011-2022 走看看