C#上位机观察者模式

C#上位机观察者模式

在C#中实现观察者模式(Observer Pattern)通常用于实现对象间的松耦合设计,使得当一个对象(被观察者,Subject)的状态发生变化时,所有依赖于它的对象(观察者,Observer)都能得到通知并自动更新。

观察者模式主要由两个部分组成:

‌主题(Subject)‌: 维护一系列依赖于它的观察者对象,并提供添加、删除和通知观察者的接口。
**‌观察者(Observer)‌:**提供一个更新接口,使得在得到通知时能更新自己。

实现步骤

1. 定义观察者接口

首先,定义一个观察者接口,该接口应包含一个更新方法。

cs 复制代码
public interface IObserver
{
    void Update(string message);
}

2. 定义主题接口和具体主题类

接下来,定义一个主题接口和具体的主题类,该类实现主题接口,并维护一个观察者列表。

cs 复制代码
public interface ISubject
{
    void Attach(IObserver observer);
    void Detach(IObserver observer);
    void Notify();
}

public class ConcreteSubject : ISubject
{
    private List<IObserver> _observers = new List<IObserver>();
    private string _state;

    public void Attach(IObserver observer)
    {
        if (!_observers.Contains(observer))
        {
            _observers.Add(observer);
        }
    }

    public void Detach(IObserver observer)
    {
        _observers.Remove(observer);
    }

    public void Notify()
    {
        foreach (var observer in _observers)
        {
            observer.Update(_state);
        }
    }

    public void SetState(string state)
    {
        _state = state;
        Notify();  // 当状态改变时通知所有观察者
    }
}

3. 实现观察者类

定义具体的观察者类,实现IObserver接口。

cs 复制代码
public class ConcreteObserver : IObserver
{
    private string _observerState;
    private string _name;

    public ConcreteObserver(string name)
    {
        this._name = name;
    }

    public void Update(string message)
    {
        _observerState = message;  // 更新观察者的状态或执行某些操作基于新的状态信息
        Console.WriteLine($"Observer {_name} received update: {_observerState}");
    }
}

4. 使用观察者模式

最后,创建主题和观察者对象,并将观察者附加到主题上,然后改变主题的状态来触发通知。

cs 复制代码
class Program
{
    static void Main(string[] args)
    {
        ISubject subject = new ConcreteSubject();
        IObserver observer1 = new ConcreteObserver("Observer1");
        IObserver observer2 = new ConcreteObserver("Observer2");
        IObserver observer3 = new ConcreteObserver("Observer3");
        subject.Attach(observer1);
        subject.Attach(observer2);
        subject.Attach(observer3);  // 将观察者附加到主题上
        subject.SetState("New State");  // 改变状态,通知所有观察者更新状态信息。
    }
}

在这个例子中,每当ConcreteSubject的状态改变时,所有附加到它的ConcreteObserver对象都会收到通知并更新它们的状态。这样就实现了观察者模式。

相关推荐
Lost of 程序猿9 分钟前
用 Quartz.NET 优雅地处理 .NET 定时任务:从选型到 Docker 部署全记录
后端·c#·asp.net
辛苦才能1 小时前
C++多态原理:虚函数表的内存布局与动态绑定的汇编真相
开发语言·c++
铲灰1 小时前
做个总结而已
开发语言
IvanCodes1 小时前
Python 文件操作(十二):文件与目录的读写
开发语言·python
神仙别闹9 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
伞伞悦读10 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
林川~0110 小时前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
2601_9669496513 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_7345717613 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
He BianGu14 小时前
【WPF-VisionMaster】机器视觉通用平台V5.0版本发行说明
opencv·c#·wpf·halcon·机器视觉·visionmaster