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

相关推荐
lly20240616 小时前
Bootstrap 警告框
开发语言
2601_9491465316 小时前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
曹牧17 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
KYGALYX17 小时前
服务异步通信
开发语言·后端·微服务·ruby
zmzb010317 小时前
C++课后习题训练记录Day98
开发语言·c++
懒人咖17 小时前
缺料分析时携带用料清单的二开字段
c#·金蝶云星空
猫头虎18 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
YUJIANYUE18 小时前
PHP纹路验证码
开发语言·php
仟濹18 小时前
【Java基础】多态 | 打卡day2
java·开发语言
孞㐑¥18 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法