Observer
观察者模式:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
别名:发布-订阅模式、模型-视图模式
在C#中观察者模式利用事件实现是最简单的,主要就分为两个角色
- 主题:也可叫做发布者,当其发生改变时,负责通知所有注册的观察者
-
1、场景描述
2、实现
```csharp ///
/// 主题—猫 /// public class CatSubject { // 这里的事件用来注册观察者 public event Action Observers;///
/// 猫叫 /// public void Miao() {Console.WriteLine("猫叫了...");if(Observers != null)Observers.Invoke();
} } ///
/// 观察者接口 /// public interface IObserver { ////// 反应 /// void Response(); } ////// 具体观察者角色 — 老鼠 /// public class MouseObserver : IObserver { public void Response() {Console.WriteLine("老鼠开始跑...");} } ///
/// 具体观察者角色 — 小孩 /// public class BabyObserver : IObserver { public void Response() {Console.WriteLine("baby 开始哭...");} } ///
/// 具体观察者角色 — 小偷 /// public class ThiefObserver : IObserver { public void Response() {Console.WriteLine("小偷吓了一跳...");} }
// 客户端调用 CatSubject cat = new CatSubject(); IObserver observer = null; observer = new BabyObserver(); // 注册事件 cat.Observers += observer.Response; observer = new MouseObserver(); cat.Observers += observer.Response; observer = new ThiefObserver(); cat.Observers += observer.Response;
cat.Miao();
```
上面的代码可以用UML表示如下:
抽象观察者角色也可以省去, 具体情况具体分析吧。
3、优缺点
优点:
