观察者模式

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

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 @ 2024-09-09 15:01  电器小君子  阅读(52)  评论(0)    收藏  举报