首页 > 代码库 > 设计模式5——观察者模式
设计模式5——观察者模式
观察这模式中,有一个观察者监听一个事件,当事件发生时,向所有被通知者发送相应的消息和命令。
例如,秘书作为观察者,监听老板的动作。当老板回来时,向看电影、睡觉的员工发送消息,让他们停止并开始工作。
Observation.h内容
1 #ifndef Observation_H_H 2 #define Observation_H_H 3 4 #include <iostream> 5 #include <vector> 6 using namespace std; 7 8 class Secretary; 9 10 class Boss11 {12 public:13 Boss();14 void comeBack();15 void setSecretary(Secretary *secretary0);16 private:17 Secretary *secretary;18 };19 20 class Staff21 {22 public:23 virtual void getSingal() = 0;24 virtual ~Staff() {}25 };26 27 class StaffMovie : public Staff28 {29 public:30 virtual void getSingal() { cout << "Boss is coming, Stop watching movie!" << endl; }31 };32 33 class StaffSleep : public Staff34 {35 public:36 virtual void getSingal() { cout << "Boss is coming, Stop sleeping!" << endl; }37 };38 39 class Secretary40 {41 public:42 Secretary() : boss(NULL) {}43 void sendSingal(){44 for(size_t i=0; i<vecStaff.size(); ++i){45 vecStaff[i]->getSingal();46 }47 }48 49 void addStaff(Staff *staff) { vecStaff.push_back(staff); }50 void setBoss(Boss *boss0) { boss = boss0; }51 private:52 Boss *boss;53 vector<Staff*> vecStaff;54 };55 56 57 Boss::Boss() : secretary(NULL) {}58 void Boss::comeBack() { secretary->sendSingal(); }59 void Boss::setSecretary(Secretary *secretary0) { secretary = secretary0; }60 61 void ObservationTest()62 {63 Boss *boss = new Boss();64 Staff *staff1 = new StaffMovie();65 Staff *staff2 = new StaffSleep();66 Secretary *secretary = new Secretary();67 secretary->addStaff(staff1);68 secretary->addStaff(staff2);69 secretary->setBoss(boss);70 boss->setSecretary(secretary);71 72 boss->comeBack();73 }74 75 #endif
运行结果:
设计模式5——观察者模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。