`
kmplayer
  • 浏览: 509873 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式之命令模式

阅读更多
1,命令(command)模式最大的特点:允许向一个函数或者对象传递一个想要的动作.
#include <iostream>
#include <vector>
using namespace std;

class Command
{
public:
    //接口,执行的动作
    virtual void execute()=0;
};

class Hello:public Command
{
public:
    void execute(){ cout<<"Hello!"<<endl; }
};

class Word:public Command
{
public:
    void execute(){ cout<<"Word!"<<endl; }
};

class Pattern:public Command
{
public:
    void execute(){ cout<<"Command Pattern!"<<endl; }
};

class TaskRun
{
    vector<Command*> commands;
public:
    //添加命令动作.
    void add(Command* e){ commands.push_back(e); }
    //执行
    void run()
    {
        vector<Command*>::iterator ite=commands.begin();
        while(ite!=commands.end())
            (*ite++)->execute();
    }
};

int main()
{
    TaskRun comptn;
    comptn.add(new Hello);
    comptn.add(new Word);
    comptn.add(new Pattern);
    comptn.run();
    return 0;
}


2,一个稍微复杂的程序
#include <iostream>
#include <vector>
#include <ctime>
#include <string>
#include <cstdlib>
using namespace std;

class Command
{
public:
    //接口,执行的动作
    virtual void execute()=0;
};
class CommandRunner
{
    //设置为单件
    static vector<Command*> commands;
    CommandRunner(){}
    CommandRunner(const CommandRunner&);
    CommandRunner& operator=(CommandRunner&);
    static CommandRunner cr;
public:
    //添加命令动作.
    static void add(Command* e){ commands.push_back(e); }
    //执行
    static void run()
    {
        vector<Command*>::iterator ite=commands.begin();
        while(ite!=commands.end())
            (*ite++)->execute();
    }
};
CommandRunner CommandRunner::cr;
vector<Command*> CommandRunner::commands;
//Command和Runner是一个固定的框架

//事件驱动类
class EventSimulator
{
    clock_t creation;
    clock_t delay;
public:
    EventSimulator():creation(clock())
    {
        delay=CLOCKS_PER_SEC/4*(rand()%20+1);
        cout<<"delay= "<<delay<<endl;
    }
    bool fired()
    {
        return clock()>creation+delay;
    }
};

//事件驱动按钮
class Button
{
    bool pressed;
    string id;
    EventSimulator e;
public:
    Button(string name) : pressed(false), id(name) {}
    void press(){ pressed=true; }
    bool isPressed()
    {
        if(e.fired()) press();
        return pressed;
    }
    friend ostream& operator<<(ostream& os,const Button& b)
    {
        return os<<b.id;
    }
};

//执行按钮
class CheckButton:public Command
{
    Button& button;
    bool handled;
public:
    CheckButton(Button& b) : button(b),handled(false){}
    void handle(){ handled=true; }
    void execute()
    {
        if(button.isPressed()&&!handled)
        {
            cout<<button<<" pressed"<<endl;
            handle();
        }
    }
};


int main()
{
    srand(time(0));
    Button b1("Button1");
    Button b2("Button2");
    Button b3("Button3");
    CheckButton cb1(b1),cb2(b2),cb3(b3);
    CommandRunner::add(&cb1);
    CommandRunner::add(&cb2);
    CommandRunner::add(&cb3);
    while(true)
        CommandRunner::run();
    return 0;
}
分享到:
评论

相关推荐

    设计模式之命令模式案例代码

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在本文中,我们将深入探讨命令模式的原理、结构和实际应用,并...

    深入浅出设计模式之命令模式

    ### 深入浅出设计模式之命令模式 #### 前言 设计模式作为软件工程中的重要组成部分,为开发者提供了解决常见问题的有效途径。在众多设计模式中,命令模式是一种行为型设计模式,它把请求封装成对象,以便使用不同的...

    [行为模式] head first 设计模式之命令模式(Command)

    【行为模式】Head First 设计模式之命令模式(Command) 命令模式是一种行为设计模式,它将请求封装为一个对象,从而使我们能支持可撤销的操作、参数化对象以及将请求排队等高级操作。在Head First的设计模式书中,...

    java设计模式之命令模式

    **Java设计模式之命令模式详解** 命令模式是一种行为设计模式,它将请求封装为一个对象,使得你可以使用不同的请求、队列或者日志请求,也可以支持可撤销的操作。在Java编程中,命令模式广泛应用于解耦请求的发送者...

    设计模式之命令模式源码示例

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在软件工程中,这种模式广泛应用在各种场景中,以提高代码的灵活...

    设计模式之命令模式(Command)

    命令模式是一种行为设计模式,它的主要目的是将请求者与接收者解耦,使得请求的发起者无需知道哪个对象会执行这个请求,同时也让系统更容易扩展。这种模式在软件工程中广泛应用,特别是在事件驱动和分布式系统中。 ...

    Java设计模式之命令模式/Java函数式编程 笔记

    Java设计模式之命令模式/Java函数式编程 笔记

    设计模式之命令模式(Command Pattern)

    命令模式是一种行为设计模式,它将请求封装成独立的对象,使得可以使用不同的请求、队列请求、记录请求历史以及支持可撤销的操作。这种模式在软件工程中被广泛应用,尤其是在需要解耦请求发起者和接收者时,提高了...

    23钟设计模式之命令模式

    命令模式是一种行为设计模式,它的主要目的是将请求封装为一个对象,以便支持可撤销的操作、参数化不同命令以及将命令的执行与请求者解耦。在23种经典设计模式中,命令模式因其灵活性和实用性而被广泛使用。 在命令...

    设计模式之命令模式详解(内附有例子,无源码)

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在软件工程中,这种模式常用于降低系统之间的耦合度,提高灵活性...

    设计模式之命令模式Java实现

    命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在Java中实现命令模式,我们可以按照以下步骤进行: 1. **定义...

    c++-设计模式之命令模式(Command Pattern)

    命令模式(Command Pattern)是一种行为型设计模式,它将请求封装为对象,从而使您可以使用不同的请求、队列请求或日志请求,并支持可撤销操作。命令模式通常用于实现操作的解耦,使得发送者和接收者之间不直接关联...

Global site tag (gtag.js) - Google Analytics