实验 21:观察者模式
实验 21:观察者模式
[实验任务一]:股票提醒
当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。
1. 类图:
2. 源代码:
#include <iostream>
#include <list>
using namespace std;
// 观察者接口
class IObserver {
public:
virtual void respond(int rate) = 0;
};
// 主题接口
class ISubject {
protected:
list<IObserver*> observers; // 存储观察者列表
public:
// 注册方法
void attach(IObserver* observer) {
observers.push_back(observer);
}
// 注销方法
void detach(IObserver* observer) {
observers.remove(observer);
}
// 抽象通知方法
virtual void notify(int rate) = 0;
};
// 具体主题类
class Stock : public ISubject {
public:
void notify(int rate) override {
for (auto observer : observers) {
observer->respond(rate);
}
}
};
// 具体观察者类
class Holder : public IObserver {
public:
void respond(int rate) override {
if (rate >= 5) {
cout << "股票上涨,购买股票" << endl;
}
else if (rate <= -5) {
cout << "股票下跌,大哭一场" << endl;
}
else {
cout << "股票还比较稳定哦~" << endl;
}
}
};
int main() {
ISubject* subject = new Stock();
IObserver* observer = new Holder();
subject->attach(observer);
cout << "----------------------股票上涨-----------------------" << endl;
subject->notify(5);
cout << endl;
cout << "----------------------股票下跌-----------------------" << endl;
subject->notify(-5);
cout << endl;
cout << "----------------------股票稳定-----------------------" << endl;
subject->notify(4);
cout << endl;
delete observer;
delete subject;
return 0;
}
运行截图:
3. 注意编程规范。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示