23种设计模式之观察者模式(Observer)
2023-09-11 14:22:25 时间
观察者模式又称为发布—订阅模式、模型—视图模式、源-监听器模式或从属者(dependents)模式,是一种对象的行为型模式。它定义了对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新。观察者模式的优点在于实现了表示层和数据层的分离,并定义了稳定的更新消息传递机制,类别清晰,抽象了更新接口,使得相同的数据层可以有各种不同的表示层。
优点:
1)抽象了主体与Observer之间的耦合关系。
2)支持广播方式的通信。
使用场景:
1)对一个对象的修改涉及对其它对象的修改,而且不知道有多少对象需要进行相应修改。
2)对象应该能够在不用假设对象标识的前提下通知其它对象。
public interface Observer { void Update(Subject subject); }
public interface Subject { void Attach(Observer docExplorer); void Detach(Observer docExplorer); void NotifyObservers(); }
public class DocExplorer : Observer { public void Update(Subject subject) { Console.WriteLine("更新DocExplorer自身的状态"); } }
/// <summary> /// 公文类 /// </summary> public class OfficeDoc : Subject { //存储与OfficeDoc相关联的DocExplorer对象 private IList<Observer> observerList = new List<Observer>(); /// <summary> /// 将某DocExplorer对象与OfficeDoc相关联 /// </summary> /// <param name="docExplorer"></param> public void Attach(Observer docExplorer) { observerList.Add(docExplorer); } /// <summary> /// 解除某DocExplorer对象与OfficeDoc的关联关系 /// </summary> /// <param name="docExplorer"></param> public void Detach(Observer docExplorer) { observerList.Remove(docExplorer); } /// <summary> /// 通知所有的DocExplorer对象 /// </summary> public void NotifyObservers() { IEnumerator enumeration = observerList.GetEnumerator(); while (enumeration.MoveNext()) { Observer observer = enumeration.Current as Observer; observer.Update(this); } } }
class Program { static void Main(string[] args) { //观察者设计模式 Subject subject = new OfficeDoc(); Observer doc = new DocExplorer(); subject.Attach(doc); subject.Attach(doc); subject.Attach(doc); subject.NotifyObservers(); } }
相关文章
- 设计模式(三)学习----工厂模式
- 大话设计模式之单例模式
- C#设计模式——观察者模式(Observer Pattern)
- 《Android源码设计模式》--Builder模式
- 不一样的代理模式(设计模式十三)
- 不一样的原型模式(设计模式八)
- C#设计模式——抽象工厂模式(Abstract Factory Pattern)
- 设计模式--组合模式
- 设计模式--状态模式
- 不一样的组合模式(设计模式十八)
- 不一样的装饰器模式(设计模式二)
- atitit.设计模式(1)--—职责链模式(chain of responsibility)最佳实践O7 日期转换
- 理论+案例,带你掌握Angular依赖注入模式的应用
- 实践GoF的23种设计模式:建造者模式
- [C++设计模式] state 状态模式
- 设计模式——策略模式(C++实现)
- spdlog单例模式封装
- Python:设计模式之代理模式
- Python:设计模式之单例模式
- python 设计模式之 (Chain of Responsibility)责任链模式
- 23种设计模式(3):抽象工厂模式
- 23种设计模式(15):备忘录模式
- java设计模式:观察者模式
- 设计模式----代理模式
- Redis发布订阅模式
- 【设计模式】备忘录模式(C#)
- 【设计模式】策略模式
- 【设计模式】建造者模式(C#)
- 23种设计模式-8外观模式
- 23种设计模式-3工厂模式-简单工厂
- 23种类设计模式--2原型模式