1. 介绍
也被称为发布订阅模式(Publish-Subscribe Design Pattern),
观察者模式(Observer Pattern)是一种行为型设计模式,用于建立对象间的一对多依赖关系。当一个对象(被观察者/Subject)状态变化时,所有依赖它的对象(观察者/Observer)会自动收到通知并更新
2. 核心角色
- Subject(主题/被观察者) - 维护观察者列表,提供注册( - attach)和注销(- detach)方法。
- 定义通知方法( - notifyObservers),状态变化时遍历观察者列表并调用其更新方法。
 
- Observer(观察者) - 定义更新接口(如 - update),供Subject调用以传递状态变化。
 
- ConcreteSubject & ConcreteObserver - 具体实现类,例如:微信公众号(Subject)和订阅用户(Observer)。 
 
3. 工作流程
- 注册:观察者通过 - attach方法订阅Subject。
- 通知:Subject状态变化时调用 - notifyObservers,触发所有观察者的- update方法。
- 响应:观察者执行自定义逻辑(如刷新UI、处理数据)。 
- 注销:观察者通过 - detach取消订阅。
4. c#中的使用
在C# 中 有两个特殊的关键字 ,可以特殊的使用发布订阅模式
- delegate : 委托类型 ,类型安全的函数指针,用于封装方法的引用。 - 可以指向静态方法或实例方法,支持多播(链式调用多个方法) 
- 允许直接调用 
 
- Event :对委托的封装, 事件类型,用于专门实现 观察者模式 
在C#中还有两个事件的封装类型 可以更便捷的使用 观察者模式
- Func 委托:封装有返回值的方法 
Func<int, int, int> add = (a, b) => a + b; // 输入两个int,返回int
int result = add(3, 5); // 输出:8
- Action 委托 - 用途:封装无返回值的方法 
 
C#代码实例
    //定义一个委托
    public delegate void Handler(string message);
    /// <summary>
    /// 熟悉使用event 和 delegate
    /// </summary>
    public class EventExp
    {
        public static event Handler Clik;
        static void Main()
        {
            Clik += Listen;
            OnClick("你好");
        }
        // 消息发布
        static void OnClick(string message)
        {
            Console.WriteLine($"发布消息: {message}");
            Clik?.Invoke(message);
        }
        // 消息监听
        static void Listen(string message)
        {
            Console.WriteLine($"监听到消息:{message}");
        }
    } 
                    .png) 
                
            