Observer模式实践
Observer 模式在实践中的应用场景:
为 Point 类设计一个数据绑定机制,当其坐标 x 或 y 被更改时,可以通知外界其更改的过程。将更改过程打印在控制台上。考虑使用松耦合设计。
代码:
#include <list> #include <iostream> using namespace std; struct Observer; struct Subject { virtual void attach(Observer*) = 0; virtual void detach(Observer*) = 0; virtual void notify() = 0; virtual int getX() = 0; virtual int getY() = 0; list<Observer*> _observer; }; struct Observer { virtual void update(Subject*) = 0; }; struct ConsoleObserver : public Observer { virtual void update(Subject *subject) { cout << subject->getX() << " " << subject->getY() << endl; } }; class Point : public Subject{ int _x; int _y; public: virtual void attach(Observer* o) { this->_observer.push_back(o); } virtual void detach(Observer* o) { this->_observer.remove(o); } virtual void notify() { for (auto e : _observer) e->update(this); } Point(int x, int y) : _x(x), _y(y) {} void setX(int x) { this->_x = x; this->notify(); } void setY(int y) { this->_y = y; this->notify(); } int getX() { return this->_x; } int getY() { return this->_y; } }; int main() { Point po(1, 2); //绑定 ConsoleObserver co; po.attach(&co); //值的每一次变化,都会引起控制台打印 po.setX(3); po.setY(4); return 0; }
智慧在街市上呼喊,在宽阔处发声。
分类:
C++沉思
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)