观察者模式
一、定义
多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
二、示例
下面用委托、事件, 实现观察者模式
1.Publisher.cs
// 定义发布者 public class Publisher { // 声明事件 public event EventHandler OnPublish; public void Publish() { Console.WriteLine("发布了一条消息"); // 触发事件 OnPublish?.Invoke(this, EventArgs.Empty); } }
2.Subscriber.cs
// 定义订阅者 public class Subscriber { public string Name { get; } public Subscriber(string name) { Name = name; } // 定义事件处理程序 public void Handle(object sender, EventArgs args) { Console.WriteLine($"{Name} 收到了一条消息"); } }
3.Program.cs
internal class Program { static void Main(string[] args) { var publisher = new Publisher(); // 创建三个订阅者 var subscriber1 = new Subscriber("订阅者1"); var subscriber2 = new Subscriber("订阅者2"); var subscriber3 = new Subscriber("订阅者3"); // 将订阅者添加到发布者的订阅列表中 publisher.OnPublish += subscriber1.Handle; publisher.OnPublish += subscriber2.Handle; publisher.OnPublish += subscriber3.Handle; // 发布一条消息 publisher.Publish(); // 将订阅者从发布者的订阅列表中移除 publisher.OnPublish -= subscriber2.Handle; // 再次发布一条消息 publisher.Publish(); } }
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?