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

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>
            美女日韩欧美| 久久艳片www.17c.com| 欧美高清不卡在线| 久久免费黄色| 99精品欧美一区二区三区| 亚洲人成在线观看网站高清| 老司机午夜精品视频在线观看| 亚洲国产精品va在看黑人| 久久亚洲综合色| 欧美好骚综合网| 亚洲欧美文学| 久久九九精品99国产精品| 最新成人在线| 亚洲尤物影院| 欧美午夜视频一区二区| 男男成人高潮片免费网站| 亚洲国产高清自拍| 欧美日韩理论| 久久久国产成人精品| 毛片一区二区三区| 亚洲综合99| 久热精品视频| 欧美在线网址| 亚洲小说欧美另类婷婷| 久久国产精品毛片| 国产精品99久久久久久久vr| 欧美夜福利tv在线| 9l视频自拍蝌蚪9l视频成人| 久久疯狂做爰流白浆xx| 在线亚洲伦理| 巨胸喷奶水www久久久免费动漫| 亚洲午夜三级在线| 奶水喷射视频一区| 久久久久九九视频| 久久九九国产精品| 久久综合伊人77777麻豆| 亚洲综合好骚| 久久天天综合| 欧美一区二区视频在线观看| 美女黄色成人网| 欧美自拍偷拍| 欧美色另类天堂2015| 米奇777在线欧美播放| 国产精品久久久久毛片大屁完整版| 久久久无码精品亚洲日韩按摩| 欧美精品在线观看一区二区| 久久亚洲精品伦理| 国产精品免费看久久久香蕉| 亚洲区在线播放| 亚洲欧洲日韩综合二区| 欧美在线亚洲综合一区| 亚洲欧美在线磁力| 欧美午夜激情视频| 日韩视频一区二区三区在线播放免费观看 | 夜夜嗨av色综合久久久综合网| 亚洲毛片在线观看| 激情av一区二区| 亚洲一品av免费观看| 亚洲无限乱码一二三四麻| 欧美激情亚洲视频| 亚洲福利av| 亚洲日本视频| 欧美精品一二三| 在线日本高清免费不卡| 久久精品欧洲| 一区二区三欧美| 欧美午夜精品理论片a级按摩| 亚洲福利专区| 亚洲精品欧美日韩| 欧美全黄视频| 日韩一级二级三级| 亚洲午夜在线观看视频在线| 国产精品对白刺激久久久| 一区二区三区四区在线| 亚洲欧美大片| 国产欧美一区二区精品性| 香蕉尹人综合在线观看| 久久久久久69| 91久久精品日日躁夜夜躁欧美| 久久亚洲精品伦理| 亚洲人成在线观看| 亚洲欧美视频在线| 国产综合在线看| 欧美成人69av| 国产欧美婷婷中文| 欧美一区在线视频| 欧美韩国日本一区| 国产精品99久久久久久人| 国产乱码精品一区二区三区av| 久久超碰97人人做人人爱| 欧美国产日韩精品| 亚洲综合导航| 亚洲国产高清aⅴ视频| 欧美精品www在线观看| 亚洲欧美国产视频| 欧美激情欧美狂野欧美精品 | 久久成人精品无人区| 欧美寡妇偷汉性猛交| 亚洲一区二区精品| 黄色成人av网站| 欧美日韩黄色大片| 久久九九热re6这里有精品| 最新国产成人av网站网址麻豆| 午夜在线不卡| 亚洲精品视频在线| 国产一区亚洲| 欧美天堂亚洲电影院在线观看| 久久精品视频在线看| 一本色道久久加勒比精品| 久久视频这里只有精品| 亚洲一区二区三区四区在线观看| 影音先锋国产精品| 国产精品视频成人| 欧美另类视频| 欧美88av| 久久久精品日韩欧美| 亚洲深夜福利| 亚洲卡通欧美制服中文| 免费成人性网站| 久久精品国产精品亚洲| 亚洲网站在线观看| 亚洲乱码久久| 亚洲国产日韩一级| 激情综合激情| 国内久久婷婷综合| 国产欧美日韩视频| 国产精品人成在线观看免费| 欧美极品欧美精品欧美视频| 久久综合影视| 久久久久久久一区| 久久不射网站| 久久精品日韩| 久久av二区| 久久黄色级2电影| 欧美一区二区三区日韩视频| 亚洲欧美成aⅴ人在线观看| 亚洲图片欧洲图片av| 这里是久久伊人| 亚洲性视频h| 亚洲免费在线视频| 亚洲欧美日韩高清| 午夜免费电影一区在线观看| 亚洲区一区二区三区| 亚洲成色精品| 久久香蕉国产线看观看网| 国产日韩欧美精品在线| 国产精品久久久久久久免费软件 | 久久不射网站| 欧美在线免费观看视频| 久久久久高清| 免费欧美在线| 欧美日韩国产色站一区二区三区| 欧美高清一区二区| 欧美性猛交视频| 国产欧美日韩一区二区三区在线观看 | 欧美国产三级| 欧美三级电影网| 国产精品扒开腿爽爽爽视频| 国产精品人人做人人爽| 国产一区二区视频在线观看| 尤物99国产成人精品视频| 亚洲精品美女在线观看播放| 一本色道久久综合一区| 欧美一区二区精品在线| 久久久久久精| 亚洲激情电影在线| 9久草视频在线视频精品| 亚洲在线观看| 久久精品国产在热久久| 欧美精品自拍| 久久国产婷婷国产香蕉| 樱花yy私人影院亚洲| 性色av香蕉一区二区| 久久天天狠狠| 国产精品激情| 在线看日韩欧美| 亚洲一区二区视频在线| 久久久久久久欧美精品| 亚洲国产99| 欧美一区国产在线| 久久精品人人| 亚洲国产精品一区二区第一页| 夜夜爽99久久国产综合精品女不卡 | 亚洲精品久久| 午夜精品短视频| 亚洲电影第1页| 香蕉久久国产| 欧美日韩午夜| 亚洲国产日韩一区二区| 欧美在线free| 亚洲美女毛片| 久久综合久久88| 国产精品中文字幕欧美| 99亚洲一区二区| 免费看亚洲片| 欧美中文字幕久久| 国产精品区一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美精选在线| 亚洲国产精品精华液2区45|