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}");
}
}