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

先看看维基定义:

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) 模型。

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

public delegate void  NotifiyEventHandler(Object sender);
// 基于委托定义事件 
public Event NotifyEventHandler EventHandler;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

12.观察者/状态模式

12.观察者/状态模式 观察者模式 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依...

3745
来自专栏Java后端技术

设计模式之观察者模式

  随着工作时间的越来越长,发现对设计模式缺失的坏处越来越明显,但是当你知道某种设计模式的实现方式以后,你会发现,其实工作中早已经玩过这些东西,但是你之前并不知...

593
来自专栏Android学习之路

观察者模式

21010
来自专栏青玉伏案

iOS逆向工程之Hopper中的ARM指令

虽然前段时间ARM被日本软银收购了,但是科技是无国界的,所以呢ARM相关知识该学的学。现在看ARM指令集还是倍感亲切的,毕竟大学里开了ARM这门课,并且做了不少...

3397
来自专栏Java开发者杂谈

分布式改造剧集2---DIY分布式锁

1647
来自专栏Kirito的技术分享

JAVA 拾遗--Future 模式与 Promise 模式

写这篇文章的动机,是缘起于微信闲聊群的一场讨论,粗略整理下,主要涉及了以下几个具体的问题: 同步,异步,阻塞,非阻塞的关联及区别。 JAVA 中有 callb...

3K10
来自专栏电光石火

php JSON格式化

php 的json_encode能把数组转换为json格式的字符串。字符串没有缩进,中文会转为unicode编码,例如\u975a\u4ed4。人阅读比较困...

1274
来自专栏前端下午茶

JS 观察者模式

观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时...

2211
来自专栏我叫刘半仙

原荐Spring AOP是什么?你都拿它做什么?

         对于最近博主最近写博客的兴致大发,我也在思考:为什么而写博客?在互联网时代,无论你是牛人大咖,还是小白菜鸟,都有发表自己看法的权利。无论你是对...

3284
来自专栏battcn

一起学设计模式 - 观察者模式

观察者模式是一种使用率极高的模式,用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的...

602

扫码关注云+社区

领取腾讯云代金券