观察者模式

观察者模式是一种行为设计模式,在该模式中,一个对象(称为主题)维护一组依赖它的对象(称为观察者),当主题状态发生变化时,它会自动通知并更新所有观察者。下面是一个简单的观察者模式的示例代码:

复制代码
using System;
using System.Collections.Generic;

// 主题接口
interface ISubject
{
    void RegisterObserver(IObserver observer);
    void RemoveObserver(IObserver observer);
    void NotifyObservers();
}

// 观察者接口
interface IObserver
{
    void Update(string message);
}

// 具体主题类
class ConcreteSubject : ISubject
{
    private List<IObserver> observers = new List<IObserver>();
    private string state;

    public void RegisterObserver(IObserver observer)
    {
        observers.Add(observer);
    }

    public void RemoveObserver(IObserver observer)
    {
        observers.Remove(observer);
    }

    public void NotifyObservers()
    {
        foreach (var observer in observers)
        {
            observer.Update(state);
        }
    }

    // 当状态发生改变时触发通知
    public void SetState(string newState)
    {
        state = newState;
        NotifyObservers();
    }
}

// 具体观察者类
class ConcreteObserver : IObserver
{
    private string observerName;

    public ConcreteObserver(string name)
    {
        observerName = name;
    }

    public void Update(string message)
    {
        Console.WriteLine($"Observer {observerName} received message: {message}");
    }
}

class Program
{
    static void Main()
    {
        ConcreteSubject subject = new ConcreteSubject();

        ConcreteObserver observer1 = new ConcreteObserver("1");
        ConcreteObserver observer2 = new ConcreteObserver("2");
        ConcreteObserver observer3 = new ConcreteObserver("3");

        subject.RegisterObserver(observer1);
        subject.RegisterObserver(observer2);
        subject.RegisterObserver(observer3);

        subject.SetState("New State");
    }
}
复制代码

在上面的代码中,我们定义了一个主题接口 ISubject 和一个观察者接口 IObserver,并实现了具体的主题类 ConcreteSubject 和具体的观察者类 ConcreteObserver。主题类维护观察者列表,可以注册、移除观察者,并在状态发生变化时通知所有观察者。观察者类实现观察者接口,在接收到主题的通知时进行相应的更新操作。

在 Main() 方法中,我们实例化主题对象和三个观察者对象,将观察者注册到主题中,并通过 SetState() 方法改变主题的状态,从而触发通知并更新所有观察者。每个观察者在接收到通知时会输出相应的信息。

这个例子展示了观察者模式的基本实现,通过这种方式,主题与观察者之间实现了解耦,主题可以独立改变状态并通知观察者,观察者可以自由地订阅和取消订阅主题的通知。

posted @   电器小君子  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示