用C++ 观察者模式表示这个场景老板来了 员工工作 司机擦车 前台服务顾客 老板走了 员工炒股 前台化妆
时间: 2024-02-18 16:59:19 浏览: 15
好的,我可以用 C++ 实现观察者模式来模拟这个场景。首先,我们需要定义一个主题(Subject)类,它会对观察者进行管理:
```c++
#include <iostream>
#include <vector>
class Subject {
public:
virtual ~Subject() {}
virtual void attach(Observer* observer) {
observers.push_back(observer);
}
virtual void detach(Observer* observer) {
for (auto it = observers.begin(); it != observers.end(); ++it) {
if (*it == observer) {
observers.erase(it);
break;
}
}
}
virtual void notify() {
for (auto observer : observers) {
observer->update();
}
}
private:
std::vector<Observer*> observers;
};
```
然后,我们需要定义一个观察者(Observer)类,它会收到主题的通知并进行相应的处理:
```c++
class Observer {
public:
virtual ~Observer() {}
virtual void update() = 0;
};
```
接下来,我们就可以定义具体的主题和观察者了。
在这个场景中,老板、员工、司机、前台都是观察者,而事件(老板来了、老板走了等)就是主题。因此,我们可以定义一个 Boss 类来表示老板,一个 Employee 类来表示员工,一个 Driver 类来表示司机,一个 Receptionist 类来表示前台,还有一个 Event 类来表示事件:
```c++
class Boss : public Observer {
public:
void update() override {
std::cout << "老板来了" << std::endl;
}
};
class Employee : public Observer {
public:
void update() override {
std::cout << "员工工作" << std::endl;
}
};
class Driver : public Observer {
public:
void update() override {
std::cout << "司机擦车" << std::endl;
}
};
class Receptionist : public Observer {
public:
void update() override {
std::cout << "前台服务顾客" << std::endl;
}
};
class Event : public Subject {
public:
void bossArrived() {
std::cout << "老板来了" << std::endl;
notify();
}
void bossLeft() {
std::cout << "老板走了" << std::endl;
notify();
}
};
```
最后,我们可以在主函数中模拟这个场景:
```c++
int main() {
Boss boss;
Employee employee;
Driver driver;
Receptionist receptionist;
Event event;
event.attach(&boss);
event.attach(&employee);
event.attach(&driver);
event.attach(&receptionist);
event.bossArrived(); // 老板来了
event.bossLeft(); // 老板走了
// 员工和前台取消订阅
event.detach(&employee);
event.detach(&receptionist);
event.bossArrived(); // 老板来了
event.bossLeft(); // 老板走了
// 员工炒股,前台化妆
std::cout << "员工炒股" << std::endl;
std::cout << "前台化妆" << std::endl;
return 0;
}
```
输出结果为:
```
老板来了
员工工作
司机擦车
前台服务顾客
老板走了
老板来了
司机擦车
员工炒股
前台化妆
老板走了
```