- 1、本文档共28页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
22C#设计模式_观察者模式
www.ChinaSA.info www.ChinaSA.info Design Patterns 观察者模式 刘 伟 (Sunny) weiliu_china@126.com 大纲 观察者模式概述 观察者模式的结构与实现 观察者模式的应用实例 观察者模式与.NET中的委托事件模型 观察者模式与MVC 观察者模式的优缺点与适用环境 观察者模式概述 交通信号灯与汽车示意图 观察者模式概述 分析 交通信号灯 ? ? 观察目标 汽车(汽车驾驶员) ? ?观察者 一 对 多 观察者模式概述 分析 软件系统:一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变,它们之间将产生联动 观察者模式: 定义了对象之间一种一对多的依赖关系,让一个对象的改变能够影响其他对象 发生改变的对象称为观察目标,被通知的对象称为观察者 一个观察目标可以对应多个观察者 观察者模式概述 观察者模式的定义 对象行为型模式 观察者模式:定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新。 Observer Pattern: Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. 观察者模式概述 观察者模式的定义 别名 发布-订阅(Publish/Subscribe)模式 模型-视图(Model/View)模式 源-监听器(Source/Listener)模式 从属者(Dependents)模式 观察者模式的结构与实现 观察者模式的结构 观察者模式的结构与实现 观察者模式的结构 观察者模式包含以下4个角色: Subject(目标) ConcreteSubject(具体目标) Observer(观察者) ConcreteObserver(具体观察者) 观察者模式的结构与实现 观察者模式的实现 典型的抽象目标类代码: using System.Collection abstract class Subject { //定义一个观察者集合用于存储所有观察者对象 protected ArrayList observers = new ArrayList(); //声明抽象注册方法,用于向观察者集合中增加一个观察者 public abstract void Attach(Observer observer); //声明抽象注销方法,用于在观察者集合中删除一个观察者 public abstract void Detach(Observer observer); //声明抽象通知方法 public abstract void Notify(); } 观察者模式的结构与实现 观察者模式的实现 典型的具体目标类代码: class ConcreteSubject : Subject { public override void Attach(Observer observer) { observers.Add(observer); } public override void Detach(Observer observer) { observers.Remove(observer); } //实现通知方法 public override void Notify() { //遍历观察者集合,调用每一个观察者的响应方法 foreach(object obs in observers) { ((Observer)obs).Update(); } } } 观察者模式的结构与实现 观察者模式的实现 典型的抽象观察者代码: interface Observer { void Update(); } 观察者模式的结构与实现 观察者模式的实现 典型的具体观察者代码: class ConcreteObserver : Observer { //实现响应方法 public void Update() { //具体更新代码 } } 观察者模式的结构与实现 观察者模式的实现 说明: 有时候在具体观察者类ConcreteObserver中需要使用到具体目标类ConcreteSubject中的状态(属性),会存在关联或依赖关系 如果在具体层之间具有关联关系,系统
文档评论(0)