观察者模式是一种行为设计模式,在该模式中,一个对象(称为主题)维护一组依赖它的对象(称为观察者),当主题状态发生变化时,它会自动通知并更新所有观察者。下面是一个简单的观察者模式的示例代码:
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()
方法改变主题的状态,从而触发通知并更新所有观察者。每个观察者在接收到通知时会输出相应的信息。
这个例子展示了观察者模式的基本实现,通过这种方式,主题与观察者之间实现了解耦,主题可以独立改变状态并通知观察者,观察者可以自由地订阅和取消订阅主题的通知。
标签:observer,void,主题,观察者,模式,IObserver,ConcreteObserver From: https://www.cnblogs.com/wuqihe/p/18404582