美文网首页
设计模式系列--观察者模式

设计模式系列--观察者模式

作者: 暮染1 | 来源:发表于2017-10-31 10:30 被阅读2次

定义

观察者模式,又可以称之为发布-订阅模式,观察者,顾名思义,就是一个监听者,类似监听器的存在,一旦被观察/监听的目标发生的情况,就会被监听者发现,这么想来目标发生情况到观察者知道情况,其实是由目标将情况发送到观察者的。

观察者模式多用于实现订阅功能的场景,例如微博的订阅,当我们订阅了某个人的微博账号,当这个人发布了新的消息,就会通知我们。

例子介绍

观察者模式面向的需求是:A 对象(观察者)对 B 对象(被观察者)的某种变化高度敏感,需要在 B 变化的一瞬间做出反应。举个例子,新闻里喜闻乐见的警察抓小偷,警察需要在小偷伸手作案的时候实施抓捕。在这个例子里,警察是观察者,小偷是被观察者,警察需要时刻盯着小偷的一举一动,才能保证不会漏过任何瞬间。程序的观察者模式和这种真正的『观察』略有不同,观察者不需要时刻盯着被观察者(例如 A 不需要每过 2ms 就检查一次 B 的状态),而是采用注册(Register)或者称为订阅(Subscribe)的方式,告诉被观察者:我需要你的某某状态,你要在它变化的时候通知我。 Android 开发中一个比较典型的例子是点击监听器 OnClickListener 。对设置 OnClickListener 来说, View 是被观察者, OnClickListener 是观察者,二者通过 setOnClickListener() 方法达成订阅关系。订阅之后用户点击按钮的瞬间,Android Framework 就会将点击事件发送给已经注册的 OnClickListener 。采取这样被动的观察方式,既省去了反复检索状态的资源消耗,也能够得到最高的反馈速度。当然,这也得益于我们可以随意定制自己程序中的观察者和被观察者,而警察叔叔明显无法要求小偷『你在作案的时候务必通知我』。

观察者模式的好处

观察者模式提供了一种对象设计,让被观察者和观察者之间耦合度降得很低,为什么呢?关于观察者的一切,被观察者只知道观察者实现了Observer接口,并不需要观察者具体的类是谁,做了什么或者其他细节.

这样的话,由于松耦合,改变被观察者或者观察者其中一方,并不会影响另一方,只要他们之间的接口仍被遵守,就可以自由地改变它.

降低对象之间的耦合度,也是面设对象设计的一个很重要的原则.

相关文章

  • 设计模式之观察者模式

    设计模式之观察者模式 本篇是设计模式系列博客的第四篇,本篇主要学习设计模式中的第二个行为型模式---观察者模式。 ...

  • 设计模式系列-观察者模式

    JAVA设计模式系列: 单例模式 观察者模式 观察者模型 定义 也称作发布/订阅模式。观察者模式定义了一种一对多的...

  • Java设计模式系列-观察者模式

    原创文章,转载请标注出处:《Java设计模式系列-观察者模式》 一、概述 观察者模式,又可以称之为发布-订阅模式,...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • 手撸golang 行为型设计模式 观察者模式

    手撸golang 行为型设计模式 观察者模式 缘起 最近复习设计模式拜读谭勇德的<<设计模式就该这样学>>本系列笔...

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • Android 观察者模式

    Android 设计模式系列文章 Android 23种设计模式 前言 观察者模式是我们使用率比较高的一种模式了。...

  • 设计模式系列-简单工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 定义 简单工厂模式又叫做静态工厂方法模式...

  • Android 设计模式之各种工厂方法模式

    久违的设计模式系列视频。之前写过三篇设计模式。感兴趣的可以看看。 单例模式 观察者模式 策略模式 好了,我们开始正...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

网友评论

      本文标题:设计模式系列--观察者模式

      本文链接:https://www.haomeiwen.com/subject/qcnvpxtx.html