观察者模式
·
在日常开发中,我们经常会遇到 “一个对象状态变化,多个对象需要同步响应” 的场景 —— 比如公众号发布文章后,所有订阅者都会收到推送;比如服务器启动后,日志、监控等组件需要同步初始化;比如监控系统检测到 CPU 阈值超标后,邮件、短信告警模块需要立即触发。
面对这类场景,硬编码的if-else会让代码耦合度极高、扩展性极差,而观察者模式正是解决这类问题的最优解之一。本文将从原理到实战,全面拆解观察者模式,结合 C++ 代码实现,让你真正掌握这一高频设计模式。
一、什么是观察者模式?
1. 核心定义
观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象间的一对多依赖关系:当一个对象(被观察者 / 主题)的状态发生改变时,所有依赖它的对象(观察者)都会自动收到通知,并进行相应的更新操作。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class observer//观察者
{
public:
virtual void updata(const string& ober) = 0;//接收主题
virtual ~observer() = default;
};
class realobserver :public observer
{
public:
void updata(const string& msg)
{
cout << "消息更新:" << msg << endl;
}
};
class subject//模式主题
{
private:
//用vector存储所有的观察者
vector<observer*> _observer;
public:
virtual ~subject() = default;
//添加观察者
void attach(observer* observer)
{
_observer.push_back(observer);
}
//删除观察者
void detach(observer* observer)
{
for (auto it=_observer.begin();it!=_observer.end();it++)
{
if (*it == observer)
{
_observer.erase(it);
break;
}
}
}
//更新消息
void notify(const string& msg)
{
//遍历容器,调用更新函数
for (auto x : _observer)
{
x->updata(msg);
}
}
};
class msgsubbject :public subject
{
public:
void sendmsg(const string& msg)
{
notify(msg);
}
};
int main()
{
msgsubbject subject;
realobserver observer1;
realobserver observer2;
subject.attach(&observer1);
subject.attach(&observer2);
subject.sendmsg("大家好,欢迎大家");
}
更多推荐


所有评论(0)