前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式(2): 观察者模式-1

设计模式(2): 观察者模式-1

作者头像
用户2434869
发布2018-09-12 10:25:39
3640
发布2018-09-12 10:25:39
举报
文章被收录于专栏:yl 成长笔记yl 成长笔记

先看看维基定义:

The observer pattern is a softeware desugn pattern in which an object, called the subject, maintains a list of its dependents, called observers, and notifes them automatically of any state changes, usually by calling one of their methods. (The observer pattern is also a key part in the familiar model-view-controller(MVC).)

观察者模式:

存在两个对象 ,主题对象 观察者对象, 主题对象包含一系列观察者对象。 每当主题的状态改变时,都会通过调用观察者对象中的方法来通知所有观察者对象(MVC 模式中也包含了观察者模式)。

重点: 观察者定义了对象之间的一对多依赖,一个对象改变状态,它的所有的依赖者都会收到通知并自动更新。 在程序设计时, 如果遇到一对多依赖的情况,首先要条件反射的想能否用观察者模式

按照面向接口编程的原则, 存在主题对象观察者对象, 则自然存在抽象主题对象以及抽象观察者对象, 静态类图如下:

以上结构图中角色如下:

  • Subject(抽象主题角色):将所有观察者对象的引用保持在一个列表中,动态的通知观察者对象,并提供增加与删除观察者对象的操作, 一般由抽象类或者接口实现。
  • Observer(抽象观察者对象): 为所有具体观察者定义一个接口,在得到 Subject 通知时更新自己。 一般由抽象类或者接口实现。
  • ConcreteSubject(具体主题角色/具体被观察者角色): 实现抽象主题接口。
  • ConcreteObserver(具体观察者角色); 实现抽象观察者接口, 使自身状态与主题的状态相协调。

在 .net 以及 jave内置了观察者模式 —— 事件。包含事件的类用于发布事件,被称为 发布器(publisher, 对应上文的 主题类), 其他接收该事件的类被称为 订阅器 (subscriber, 对应上文的 抽象观察类),  使用 发布 - 订阅 (publisher - subscriber) 模型。

简化的位置,用 委托以及事件取代 抽象观察者类:

代码语言:javascript
复制
public delegate void  NotifiyEventHandler(Object sender);
// 基于委托定义事件 
public Event NotifyEventHandler EventHandler;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档