观察者模式

复制代码
#include <iostream>
#include <string>
using namespace std;

class Subject
{
private:
    vector<Observer> observers = new List<Observer>();
public :
    void Attach(Observer observer)
    {
        observers.push_back(observer);
    }
    void Detach(Observer observer)
    {
        for( ;; )
        {
            observers.erase(observer);
        }
    }
    void Notufy()
    {
        for(Observer o in observers)
        {
            o.Update();
        }
    }
};

class ConcreteSubject : Subject
{
private:
    string subjectState;
public:
    string Subjectstate
    {
        get
        set
    }
};

class Observer
{
public:
    virtual void Update()=0;

};

class ConcreteObserver:Observer
{
    ConcreteSubject subject;
public:
    void update()
    {

        cout<<" "<<subject.subjectState<<endl;
    }
};

int main()
{
    ConcreteSubject s = new ConcreteSubject();
    s.Attach(new ConcreteObserver());
    s.Attach(new ConcreteObserver());
    s.Attach(new ConcreteObserver());
    s.subjectState = "ABC";
    s.Notufy();
}
复制代码

使用场景:当一个对象的改变需要同时改变其他对象的时候,而且不知道具体有多少对象有待改变时,应该考虑观察者模式。

当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,这是用观察者模式,可以将这两者封装在独立的对象中,使它们各自独立的改变和复用。

posted on   zyz913614263  阅读(128)  评论(0编辑  收藏  举报

编辑推荐:
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
阅读排行:
· 从零开始开发一个 MCP Server!
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

点击右上角即可分享
微信分享提示