1. 介绍

也被称为发布订阅模式(Publish-Subscribe Design Pattern),

观察者模式(Observer Pattern)是一种​​行为型设计模式​​,用于建立对象间的一对多依赖关系。当一个对象(被观察者/Subject)状态变化时,所有依赖它的对象(观察者/Observer)会自动收到通知并更新

2. 核心角色

  • ​Subject(主题/被观察者)​

    • 维护观察者列表,提供注册(attach)和注销(detach)方法。

    • 定义通知方法(notifyObservers),状态变化时遍历观察者列表并调用其更新方法。

  • ​Observer(观察者)​

    • 定义更新接口(如update),供Subject调用以传递状态变化。

  • ​ConcreteSubject & ConcreteObserver​

    • 具体实现类,例如:微信公众号(Subject)和订阅用户(Observer)。

3. 工作流程

  1. ​注册​​:观察者通过attach方法订阅Subject。

  2. ​通知​​:Subject状态变化时调用notifyObservers,触发所有观察者的update方法。

  3. ​响应​​:观察者执行自定义逻辑(如刷新UI、处理数据)。

  4. ​注销​​:观察者通过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}");
        }


    }