观察者模式
观察者模式是一种行为设计模式,在该模式中,一个对象(称为主题)维护一组依赖它的对象(称为观察者),当主题状态发生变化时,它会自动通知并更新所有观察者。下面是一个简单的观察者模式的示例代码:
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()
方法改变主题的状态,从而触发通知并更新所有观察者。每个观察者在接收到通知时会输出相应的信息。
这个例子展示了观察者模式的基本实现,通过这种方式,主题与观察者之间实现了解耦,主题可以独立改变状态并通知观察者,观察者可以自由地订阅和取消订阅主题的通知。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)