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 小时前
别再乱用 StartNew:C#.NET TaskFactory 任务调度实战详解
c#·.net
Artech16 小时前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
Scout-leaf2 天前
C#摸鱼实录——IoC与DI案例详解
c#
咕白m6252 天前
使用 C# 在 Excel 中应用多种字体样式
后端·c#
Artech3 天前
[MAF预定义的AIContextProvider-02]AgentSkillsProvider——将Agent Skills引入MAF
ai·c#·agent·agent skills·maf
LDR0063 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术3 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园3 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob3 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享3 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm