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对象都会收到通知并更新它们的状态。这样就实现了观察者模式。

相关推荐
西门吹-禅8 小时前
java springboot N+1问题
java·开发语言·spring boot
skywalk81639 小时前
设计并实现段言的 C FFI 绑定机制 @Trae
c语言·开发语言·python·编程
IT笔记10 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
2zcode10 小时前
免费开源项目文档:基于MATLAB卷积神经网络的口罩佩戴检测系统
开发语言·matlab·cnn
逝水无殇11 小时前
C# 运算符重载详解
开发语言·后端·c#
TPBoreas11 小时前
配置信息防泄露方案:.env 环境隔离详解(dotenv-java)
java·开发语言
敲代码的嘎仔12 小时前
实习日志day6--实习日志day6--title命名规范化&businessType纠正&补充缺失的@Log注解&报警与通信模块补充&产出阶段总结文档
java·开发语言·人工智能·git·python·实习·大二
江华森12 小时前
Python 实现高德地图找房(一):环境搭建与数据爬虫
开发语言·爬虫·python
杜子不疼.12 小时前
【Qt初识】信号槽(三):机制意义、断开连接与 Lambda 表达式
开发语言·数据库·qt
老迟到的茉莉13 小时前
Hermes 是谁?跟 Claude Code 差在哪
开发语言·python