设计模式:观察者模式
2016-04-22 08:32
239 查看
观察者模式:(发布-订阅模式)定义了一种一对多的依赖关系,让多个观察者对象同时监听某个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使它们能够自动更新自己。
结构图:
Subject类,可翻译为主题或者抽象通知者,一般用一个抽象类或者一个接口实现。
abstract class Subject { private IList<Observer> observers = new List<Observer>(); //增加观察者 public void Attach(Observer observer) { observers.Add(observer); } //移除观察者 public void Detach(Observer observer) { observers.Remove(observer); } //通知 public void Notify() { foreach (Observer o in observers) { o.Update(); } } }
Subject类
Observer类,抽象观察者,为所有的具体观察者定义一个接口,在得到主题(抽象通知者)的通知时及时更新自己。
abstract class Observer { public abstract void Update(); } class ConcreteObserver : Observer { private string name; private string observerState; private ConcreteSubject subject; public ConcreteObserver( ConcreteSubject subject, string name) { this.subject = subject; this.name = name; } //更新 public override void Update() { observerState = subject.SubjectState; Console.WriteLine("观察者{0}的新状态是{1}", name, observerState); } public ConcreteSubject Subject { get { return subject; } set { subject = value; } } }
使用:当一个对象的改变需要同时改变其他对象的时候(而且不知道具体有多少个对象有待改变时),应该考虑使用观察者模式。
PS:观察者模式所做的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响另一边的变化。
相关文章推荐
- 设计模式:模板方法模式
- 设计模式:原型模式
- 设计模式:简单工厂模式和工厂方法模式的区别
- Python中字符串切片操作
- 【转】杭电ACM试题分类
- JS学习笔记
- Python批量操作文件,批量合并
- python strip()函数介绍
- PCRE兼容正则表达式函数
- POSIX扩展正则表达式函数
- 正则表达式的语法规则
- 白盒测试:语句覆盖、条件覆盖、判定覆盖、条件-判定覆盖、组合覆盖、路径覆盖
- 053(四十四)
- 自动删除7天前文件及文件夹.bat
- hdu2243.考研路茫茫——单词情结(Trie图 && 矩阵乘法)
- https://wuzhuti.cn/2175.html
- 一个App完成入门篇(六)- 完成通讯录页面
- 053(四十三)
- 小代码 二叉树 添加树状打印及倒立打印
- C++标准模板库