第2章、观察者模式

1、定义:

  在对象之间定义一对多关系,当一个对象改变状态时,该对象的依赖会收到通知,并自动更新。

2、介绍

  在介绍观察者模式之前,先来说一个日常生活中经常碰到的事(可能现在的人碰到的少了,但是老一辈人喷到的要多的多),那就是关于报纸的订阅。在报纸订阅这整个事件中牵扯到了报社、订阅者、邮递员这三个角色,我们来看一看这三个角色在事件中分别都负责什么工作。

  报社,主要工作有(1)给订阅者办理/撤销报纸订阅,(2)发行新报纸,(3)将发行的新报纸分派给邮递员

  邮递员,主要工作有(1)将新发行的报纸投递给订阅者

  订阅者,主要工作有(1)告诉报社我要[取消]订阅报纸,(2)接收投递员投递的报纸

  在这整个事件中,只要订阅者不主动取消订阅并且报社不倒闭,则订阅者就会一直收到来自报社的最新报纸,由此,我们就可以引出观察者模式:出版者(报社+投递员)+订阅者=观察者模式

  让我们用几个图来大致说一下观察者模式的应用场景:

  观察者模式类图:

  

  简单说下这个类图,左上部分是主题(也就是可观察者或者说是主题提供者[我更喜欢这么叫]),右下部分是观察者(主题订阅者)。其中Subject接口是主题提供者接口,所有的主题提供者都必须实现该接口,WeatherData是一个具体的主题提供者;Observer接口是主题订阅者接口,所有的订阅者都必须实现该接口,DisplayElement接口是一个用于展现的接口,想要该功能的订阅者也要实现该接口(本例中都实现了该接口)。

  接下来简单说一下实现过程,代码我会付到文章结尾供大家下载参考。

    A、WeatherData实现Subject接口;

    B、订阅者类实现Observer接口;

    C、将主题提供者(Subject)作为订阅者(Observer)的一个属性,在订阅者实例化时,自动注册[调用registerObserver()方法]到主题提供者内;

    D、当主题提供者(Subject)内的信息发生变化时,自动调用measurementChanged()方法将通知推送[调用notifyObverser()方法]给订阅者(Observer);

    E、订阅者获取最新的信息并更新[调用update()方法]本地信息

3、本章要点

  Ж 观察者定义:定义了一对多关系,当一个对象改变状态时,该对象的依赖会收到通知,并自动更新。

  Ж 新设计原则:为交互对象之间的松耦合设计而努力

  Ж 主题(也就是可观察者)用一个共同的接口来更新观察者

  Ж 观察者和可观察者之间用松耦合方式结合,可观察者不知道观察者的具体细节,只知道观察者实现了观察者接口

  Ж 使用此模式时,观察者可以从被观察者处推(push)或者拉(pull)数据(然而,推的方式被认为更“正确”)

  Ж 有多个观察者时,不可依赖特定的通知顺序

  Ж Java有多种观察模式的实现,包括了通用的java.util.Observable。要明确使用java.util.Observable可能带来的问题,如果有必要可以自己实现观察者模式,这并不难

  

关于第2章 观察者模式模式就介绍到这里,如果以上内容有出错的地方,还请不吝赐教;如果大家觉得有讲的不明白地方,也可提出来,大家共同学习。

第3章的装饰者模式会在最近几天更新....

转载请注明出处,谢谢!

Head First 设计模式 第2章 观察者模式的更多相关文章

  1. 设计模式之第18章-观察者模式(Java实现)

    设计模式之第18章-观察者模式(Java实现) 话说曾小贤,也就是陈赫这些天有些火,那么这些明星最怕的,同样最喜欢的是什么呢?没错,就是狗仔队.英文的名字比较有意思,是paparazzo,这一说法据说 ...

  2. [head first 设计模式]第二章 观察者模式

    [head first 设计模式]第二章 观察者模式 假如我们有一个开发需求--建造一个气象观测站展示系统.需求方给我们提供了一个WeatherObject对象,能够自动获得最新的测量数据.而我们要建 ...

  3. 第16章 观察者模式(Oberver Pattern)

    原文  第16章 观察者模式(Oberver Pattern) 观察者模式  概述:   在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依 ...

  4. Java设计模式(20)观察者模式(Observer模式)

    Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...

  5. php设计模式课程---4、观察者模式的好处是什么

    php设计模式课程---4.观察者模式的好处是什么 一.总结 一句话总结: 方便选择之后去控制监听的板块数:比如选择男士之后,我可以决定监听广告里面的第二和第三板块. 1.为什么有观察者模式? 错误理 ...

  6. 设计模式之序章-UML类图那点事儿

    设计模式之序-UML类图那点事儿 序 打14年年底就像写那么一个系列,用于讲设计模式的,代码基于JAVA语言,最早接触设计模式是大一还是大二来着,那时候网上有人给推荐书,其中就有设计模式,当时给我推荐 ...

  7. java设计模式解析(1) Observer观察者模式

      设计模式系列文章 java设计模式解析(1) Observer观察者模式 java设计模式解析(2) Proxy代理模式 java设计模式解析(3) Factory工厂模式 java设计模式解析( ...

  8. [Python设计模式] 第14章 老板来了——观察者模式

    github地址:https://github.com/cheesezh/python_design_patterns 题目 用程序模拟以下情景,在一个办公室里,当老板进门的时候,前台秘书就偷偷通知办 ...

  9. 大话设计模式C++实现-第14章-观察者模式

    一.UML图 关键词:Subject维护一个Observer列表.Subject运行Notify()时就运行列表中的每一个Observer的Update(). 二.概念 观察者模式:定义了一种一对多的 ...

随机推荐

  1. Tomcat网页加载速度过慢的解决方法

    可以vim conf/server.xml,在# OS specific support.  $var _must_ be set to either true or false.下添加: JAVA_ ...

  2. Visual Studio 中指定自定义生成事件

    自定义生成事件打开方式 通过指定自定义生成事件,可以在生成开始之前或在它完成之后自动运行命令.在Visual Studio中通过右键项目->属性 进入项目属性菜单. 自定义生成事件的语法 生成事 ...

  3. MySQL加密和解密案例

    define("ENCRYPT",'2998a15c0cd853edad7');//密钥key 被存储的数据库的字段设置成blob格式(二进制) //AES_ENCRYPT 加密 ...

  4. JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

    前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...

  5. golang路上的小学生系列--使用reflect查找package路径

    本文同时发布在个人博客chinazt.cc 和 gitbook 今日看到了一个有趣的golang项目--kolpa(https://github.com/malisit/kolpa). 这个项目可以用 ...

  6. maven仓库--搭建局域网私服(windows版)

    使用nexus搭建局域网私服 一. 认识maven仓库 1.1 maven仓库的作用   回想之前不用maven的时候,我们用eclipse原始的项目骨架构建项目时,在工程目录下往往有一个lib文件夹 ...

  7. Java自学手记——servlet3.0新特性

    servlet3.0出来已经很久了,但市场上尚未普遍应用,servlet3.0有三个比较重要的新特性:使用注解来代替配置文件,异步处理以及上传组件支持. 支持servlet3.0的要求:MyEclip ...

  8. js里面的垃圾回收

    在公司经常会听到大牛们讨论时说道内存泄露神马的,每每都惊羡不已,最近精力主要用在了Web 开发上,读了一下<JavaScript高级程序设计>(书名很唬人,实际作者写的特别好,由浅入深)了 ...

  9. Nginx 502 Bad Gateway

    今天安装完php环境以后,出现这个问题,排查步骤如下: ps -ef|grep php-fpm 发现没有安装php-fpm 然后直接安装php-fpm yum -y install php-fpm 安 ...

  10. 高效测试用例组织算法pairwise之Python实现

    ------------------------------------------本文专为<光荣之路培训 >原创,如有转载请注明出处--------------------------- ...