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

相关推荐
YY&DS6 分钟前
Qt Designer 自定义控件已提升后,如何修改提升类
开发语言·qt
右耳朵猫AI16 分钟前
Rust技术周刊 2026年第19周
开发语言·后端·rust
Leweslyh26 分钟前
基于 Confucius 架构的无人集群网络控制原语解析
开发语言·网络·php
月落归舟39 分钟前
Java线程小记
java·开发语言
摇滚侠1 小时前
01 基础语法 JavaScript 入门到精通全套教程
开发语言·javascript·ecmascript
sleven fung1 小时前
Milvus 向量数据库
开发语言·数据库·python·langchain·milvus
大大杰哥1 小时前
Java 日志框架详解:SLF4J + Logback 从入门到实战
java·开发语言·logback
ylscode1 小时前
黑客利用 GHOSTYNETWORKS 和 OMEGATECH 托管 JS 恶意软件基础设施
开发语言·安全·php·安全威胁分析
爱吃生蚝的于勒1 小时前
QT开发第二章——信号和槽
c语言·开发语言·c++·qt
xcLeigh1 小时前
Python入门:Python3 operator模块全面学习教程
开发语言·python·学习·教程·python3·operator