这是我在c++思考第二卷见到的例子
如下(做了一些改正);
dev c++编程环境
其特点就是向函数或者对象传递一个想要的动作
一个命令模式简单的例子就是
class A;
class a1 : A
class a2 : A
class a3 : A
...
class B
{
list<A> alist...
}
在操作的时候
B::.....
个人感觉就是
在处理操作的时候发送一个泛化的命令函数过去,由具体的对象的具体处理函数执行之
当然类B可以做成一个单态模式
感觉还对这个模式不是很....
如下(做了一些改正);
dev c++编程环境
- #include <cstdlib>
- #include <iostream>
- #include <ctime>
- #include <vector>
- #include <memory>
- using namespace std;
- class Task
- {
- public:
- virtual void operation()=0;
- };
- class TaskRunner
- {
- public:
- static void add(Task& t) {Tasks.push_back(&t);}
- static void run()
- {
- vector<Task*>::iterator itr = Tasks.begin();
- while(itr!=Tasks.end())
- (*itr++)->operation();
- }
- private:
- static std::vector<Task*> Tasks;
- TaskRunner(){}
- TaskRunner& operator=(TaskRunner&);
- TaskRunner(const TaskRunner&);
- static std::auto_ptr<TaskRunner> tr;
- };
- std::auto_ptr<TaskRunner> TaskRunner::tr;
- vector<Task*> TaskRunner::Tasks;
- class EventSimulator
- {
- public:
- EventSimulator(): creation(clock())
- {
- delay = CLOCKS_PER_SEC/4*(rand()%20 +1);
- cout<<"delay = "<<delay <<endl;
- }
- bool fired()
- {
- return clock()>creation + delay;
- }
- private:
- clock_t creation;
- clock_t delay;
- };
- class Button
- {
- 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;}
- private:
- bool pressed;
- string id;
- EventSimulator e;
- };
- class CheckButton:public Task
- {
- public:
- CheckButton(Button& b):button(b), handled(false){}
- void operation()
- {
- if(button.isPressed() && !handled)
- cout<<button<<"pressed."<<endl;
- handled = true;
- }
- private:
- Button& button;
- bool handled;
- };
- void procedure1()
- {
- TaskRunner::run();
- }
- void procedure2()
- {
- TaskRunner::run();
- }
- void procedure3()
- {
- TaskRunner::run();
- }
- int main(int argc, char *argv[])
- {
- srand(time(0));
- 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();
- }
- system("PAUSE");
- return EXIT_SUCCESS;
- }
其特点就是向函数或者对象传递一个想要的动作
class A;
class a1 : A
class a2 : A
class a3 : A
...
class B
{
list<A> alist...
}
在操作的时候
B::.....
个人感觉就是
在处理操作的时候发送一个泛化的命令函数过去,由具体的对象的具体处理函数执行之
当然类B可以做成一个单态模式
感觉还对这个模式不是很....