青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Benjamin

靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
隨筆 - 398, 文章 - 0, 評論 - 196, 引用 - 0
數據加載中……

設計模式之command模型

Command(命令):選擇操作模型,大體上我們可以理解此類設計模型是個函數對象,將函數封裝為對象,以參數傳遞給其他對象或函數,以告訴它們在履行過程中執行特定的操作。
class Command {
public:
  virtual void execute() = 0;
};

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

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

class IAm : public Command {
public:
  void execute() { cout << "I'm the command pattern!"; }
};

// An object that holds commands:
class Macro {
  vector<Command*> commands;
public:
  void add(Command* c) { commands.push_back(c); }
  void run() {
    vector<Command*>::iterator it = commands.begin();
    while(it != commands.end())
      (*it++)->execute();
  }
};

int main() {
  Macro macro;
  macro.add(new Hello);
  macro.add(new World);
  macro.add(new IAm);
  macro.run();
} ///


GoF認為command是替代callback的面向對象的替代物,command常用的一個例子就是“撤銷(undo)”操作;一個典型的command模式僅僅創建它并把它傳遞給一個函數或對象。是下面的示例代碼如何消除正常操作和事件處理的decouling(耦合),在事件驅動編程中。
#include <iostream>
#include <vector>
#include <string>
#include <ctime>
#include <cstdlib>
using namespace std;

// Framework for running tasks:
class Task {
public:
  virtual void operation() = 0;
};

class TaskRunner {
  static vector<Task*> tasks;
  TaskRunner() {} // Make it a Singleton
  TaskRunner& operator=(TaskRunner&); // Disallowed
  TaskRunner(const TaskRunner&); // Disallowed
  static TaskRunner tr;
public:
  static void add(Task& t) { tasks.push_back(&t); }
  static void run() {
    vector<Task*>::iterator it = tasks.begin();
    while(it != tasks.end())
      (*it++)->operation();
  }
};

TaskRunner TaskRunner::tr;
vector<Task*> TaskRunner::tasks;

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;
  }
};

// Something that can produce asynchronous events:
class Button {
  bool pressed;
  string id;
  EventSimulator e; // For demonstration
public:
  Button(string name) : pressed(false), id(name) {}
  void press() { pressed = true; }
  bool isPressed() {
    if(e.fired()) press(); // Simulate the event
    return pressed;
  }
  friend ostream&
  operator<<(ostream& os, const Button& b) {
    return os << b.id;
  }
};

// The Command object
class CheckButton : public Task {
  Button& button;
  bool handled;
public:
  CheckButton(Button & b) : button(b), handled(false) {}
  void operation() {
    if(button.isPressed() && !handled) {
      cout << button << " pressed" << endl;
      handled = true;
    }
  }
};

// The procedures that perform the main processing. These
// need to be occasionally "interrupted" in order to
// check the state of the buttons or other events:
void procedure1() {
  // Perform procedure1 operations here.
  // ...
  TaskRunner::run(); // Check all events
}

void procedure2() {
  // Perform procedure2 operations here.
  // ...
  TaskRunner::run(); // Check all events
}

void procedure3() {
  // Perform procedure3 operations here.
  // ...
  TaskRunner::run(); // Check all events
}

int main() {
  srand(time(0)); // Randomize
  Button b1("Button 1"), b2("Button 2"), b3("Button 3");
  CheckButton cb1(b1), cb2(b2), cb3(b3);
  TaskRunner::add(cb1);
  TaskRunner::add(cb2);
  TaskRunner::add(cb3);
  cout << "Control-C to exit" << endl;
  while(true) {
    procedure1();
    procedure2();
    procedure3();
  }
}
說明:這里command對象由Task表示,EventSimoulator創建一個隨機延遲事件,它的對象在Button中使用,用來模擬某個不可預知的時間段用戶事件發生的動作。CheckButton是Task的實現,我們也可以把Taskrunner::run()放到一個多線程處理的“計時器”對象中,由此創建一個線程的方案。

posted on 2009-04-12 08:24 Benjamin 閱讀(451) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久都是精品| 久久久青草婷婷精品综合日韩| 欧美中文日韩| 国产一区二区av| 久久九九99| 久久久7777| 99精品视频一区| 在线视频中文亚洲| 国产女人18毛片水18精品| 久久视频在线视频| 猛干欧美女孩| 亚洲在线成人| 久久久水蜜桃| 亚洲午夜精品福利| 欧美亚洲一区| 99精品国产高清一区二区| 亚洲午夜羞羞片| 亚洲国产成人高清精品| 日韩一级大片| 在线观看av不卡| 99精品国产福利在线观看免费| 国产欧美日韩在线播放| 欧美激情精品久久久久久免费印度| 欧美日韩一区二区三区在线看| 小黄鸭视频精品导航| 免费中文日韩| 久久久av水蜜桃| 欧美三级网址| 亚洲高清不卡| 国产农村妇女毛片精品久久麻豆| 欧美激情一区二区久久久| 国产精品资源| 夜夜嗨av一区二区三区中文字幕| 影音先锋亚洲精品| 亚洲在线日韩| 亚洲无线观看| 欧美激情免费在线| 久久亚洲一区二区三区四区| 欧美视频在线观看 亚洲欧| 久久综合色影院| 国产精品一区三区| 一本色道久久88综合亚洲精品ⅰ| 精品福利电影| 欧美在线亚洲综合一区| 亚洲欧美日本伦理| 欧美日本不卡高清| 亚洲第一毛片| 亚洲大片一区二区三区| 欧美影院成人| 欧美伊人久久久久久久久影院| 欧美美女日韩| 91久久中文| 亚洲第一毛片| 久热这里只精品99re8久| 久久九九精品| 国产亚洲精品一区二区| 午夜精品国产| 久久久久久**毛片大全| 国产美女扒开尿口久久久| 亚洲视频一区二区| 亚洲免费中文字幕| 国产精品免费小视频| 一区二区三区日韩精品视频| 亚洲午夜激情| 国产精品xvideos88| 亚洲午夜视频| 午夜一区在线| 国产欧美亚洲视频| 欧美在线看片a免费观看| 久久免费高清| 亚洲欧洲在线一区| 欧美极品aⅴ影院| 99精品热视频只有精品10| 亚洲素人一区二区| 国产精品美女999| 性一交一乱一区二区洋洋av| 久久久久久网站| 1769国内精品视频在线播放| 欧美成年人视频网站| 亚洲精品国产精品乱码不99| 亚洲免费中文字幕| 国产综合精品一区| 久久久精品国产免大香伊| 欧美黄色aa电影| 亚洲精选91| 国产精品久久波多野结衣| 欧美亚洲视频在线观看| 欧美成人伊人久久综合网| aⅴ色国产欧美| 国产精品视频1区| 久久综合99re88久久爱| 一本久久a久久免费精品不卡| 欧美一区二区| 亚洲激情一区二区| 国产精品v片在线观看不卡| 欧美一级黄色网| 亚洲精品美女在线观看播放| 久久精品电影| av成人天堂| 精品成人久久| 国产精品wwwwww| 欧美r片在线| 欧美一区二区三区免费大片| 亚洲福利视频在线| 久久九九热免费视频| 99re成人精品视频| 狠狠操狠狠色综合网| 欧美视频一区二区三区…| 久久久噜噜噜久久中文字免| 99热在线精品观看| 欧美电影免费观看大全| 欧美一区二区三区四区夜夜大片| 亚洲黄色在线观看| 红桃视频亚洲| 国产女主播在线一区二区| 欧美日韩和欧美的一区二区| 亚洲精品1区| 亚洲午夜视频| 先锋影音国产精品| 亚洲精品中文字幕在线| 激情综合电影网| 国产欧美在线| 国产精品99免费看 | 一区二区国产精品| 在线播放亚洲一区| 国产亚洲精品久久久久动| 国产精品视频专区| 国产精品a级| 欧美日本亚洲韩国国产| 欧美成黄导航| 欧美xx视频| 欧美激情1区2区3区| 免费久久99精品国产自| 久久久久久精| 蜜桃av一区| 免费看av成人| 免费视频一区| 欧美电影打屁股sp| 欧美久色视频| 欧美日韩精品久久| 欧美视频一区二区在线观看| 欧美日韩人人澡狠狠躁视频| 欧美日韩一区自拍| 欧美四级在线| 国产精品美女久久久久久久| 国产精品久久激情| 国产欧美日韩在线播放| 国产亚洲一区在线播放| 韩国v欧美v日本v亚洲v | 欧美va日韩va| 欧美精品福利| 欧美视频一区二区三区四区| 国产精品久久久久久超碰| 国产伦精品一区二区三区高清| 国产农村妇女毛片精品久久莱园子 | 在线午夜精品自拍| 亚洲一区免费在线观看| 欧美一区二区三区视频在线| 久久精品亚洲| 欧美国产精品中文字幕| 欧美日韩亚洲一区二| 国产精品亚洲一区二区三区在线| 国产免费观看久久黄| 在线观看日韩www视频免费| 亚洲日本理论电影| 亚洲综合精品一区二区| 久久久久久久97| 亚洲青色在线| 亚洲欧美日韩久久精品| 巨胸喷奶水www久久久免费动漫| 欧美精品成人91久久久久久久| 国产精品狼人久久影院观看方式| 国产一区二区三区四区五区美女| 亚洲黄色av一区| 亚洲制服丝袜在线| 欧美成人首页| 亚洲午夜高清视频| 久久综合色婷婷| 国产精品a级| 亚洲国产另类久久久精品极度| 一区二区电影免费在线观看| 久久一区激情| 一本色道婷婷久久欧美| 老司机aⅴ在线精品导航| 欧美午夜女人视频在线| 亚洲第一综合天堂另类专| 亚洲欧美国产日韩天堂区| 欧美不卡福利| 亚洲欧美视频| 欧美日韩一区免费| 亚洲第一在线视频| 久久精品一级爱片| 中文在线一区| 欧美福利精品| 亚洲国产老妈| 理论片一区二区在线| 亚洲男人的天堂在线| 欧美午夜无遮挡| 夜夜嗨av一区二区三区网页| 老司机aⅴ在线精品导航|