首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏D·技术专栏

    观察者模式观察者模式

    介绍 观察者属于行为模式,当一个对象改变时,会通知订阅者做相应的处理。 是一种低耦合的方式,观察者和被观察者者之间不互相依赖。 缺点或者说需要注意的点:1、如果观察者很多,要通知所有的观察者需要很多时间 2、观察者之间互相循环调用,会导致系统崩溃。 Demo 1、定义一个被观察者 public class Subject { //监控的状态 private Integer state; //维护所有观察者的列表 private = new ArrayList<>(); public Integer getState() { return state; } //状态被改变 通知所有的观察者 /** * 二进制观察者 */ public class BinaryObserver extends Observer { public BinaryObserver(Subject

    1.1K20发布于 2021-09-07
  • 来自专栏向治洪

    观察者模式

    观察者模式观察者模式定义了一种一对多的依赖关系,当一个对象改变状态时,它的所有依赖者都会受到通知,并自动更新。 注意: 观察者模式会造成内存泄漏,一定要记得取消订阅 UML关系图如下: UML 观察者模式提供了一种对象设计,让主题和观察者之间松耦合。 观察者与主题之间依赖于接口,主题不需要知道观察者的具体实现 可以动态添加删除观察者,对主题没有任何影响 新增新类型的观察者对主题没有影响,主题的代码不需要修改,而且旧的观察者也不受影响 观察者与主题都可以独立复用 ,因为是松耦合 只要约定的接口不改变,修改主题或观察者任何一方,都不会影响另一方 代码实现 首先定义抽象的观察者: public interface Watcher { void update girl.addWatcher(watcher3); girl.notifyWatchers("开心"); } } 其实,如果大家做过Android开发的话,Android里面大量用了观察者模式

    88080发布于 2018-02-05
  • 来自专栏软件工程

    观察者模式

    public class cartoon { private Vector<student> studentlist=new Vector(); //定义学生数组 private String active; //定义活动 public String getActive() { //获取活动 return active; } public void setActive(String active) { //设置活

    34140编辑于 2022-05-13
  • 来自专栏友儿

    观察者模式

    .'/'.str_replace('\\','/',$class).'.php'; } } 观察者模式 首先用一段代码解释一下,当一个Event事件发生时,会触发很多表的更新。 echo "逻辑2
    \n"; echo "逻辑3
    \n"; } } $event = new Event(); $event->trigger(); 观察者模式代码实现 新建Observer.php观察者接口约束 <? php namespace Frame; interface Observer { //观察者更新 public function update($event_info = null) php namespace Frame; abstract class EventGenerator { private $observers = []; /** * 添加观察者

    48410编辑于 2022-09-11
  • 来自专栏JMCui

    观察者模式.

    一、概念 观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 观察者模式四个角色:  1、抽象主题:定义对观察者管理的接口,包括 订阅、取消订阅、通知接口。   主题 + 观察者 = 观察者模式,可以用报纸订阅服务来模拟这个模式 —— 报纸是主题,订阅报纸的人是观察者观察者可以选择是否订阅或者退订主题。 汗~ 演示源代码:https://github.com/JMCuixy/design-patterns 三、总结 设计原则:观察者模式是为了交互对象之间的松耦合设计而努力。 缺点:在应用观察者模式时需要考虑一下开发效率和运行效率的问题,因为在Java中消息的通知一般是顺序执行,那么一个观察者卡顿,会影响整体的执行效率,在这种情况下,我们一般会采用异步实现。

    67810发布于 2018-12-11
  • 来自专栏nummy

    观察者模式

    观察者模式(有时又被称为发布(publish-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。 在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。 观察者模式中包含以下几种对象类型: 观察者(Observer):观察者将自己注册到被观察对象中,被观察对象将观察者存放在一个容器(Container)里。 被观察对象(Subject):被观察对象发生了某种变化,从容器中得到所有注册过的观察者,将变化通知观察者。 示例 # coding:utf-8 import weakref class Subject(object): """被观察对象,使用列表存储所有观察者""" def __init__

    41620发布于 2018-08-27
  • 来自专栏憧憬博客分享

    设计模式 | 观察者模式

    说明 这个设计模式很常用、重要, 所以要好好看。这是一个非常经典的设计模式, 解决了不少问题, 在实际项目中应用比较广泛。 先简单说一下设计模式的定义: 一旦主体对象状态发生改变,与之关联的观察者对象会收到通知,并进行相应操作。观察者模式实现了低耦合,非侵入式的通知与更新机制。 举个? 这个设计模式之后变种了一个发布/订阅的模式, 这个设计模式也是比较容易理解, 大家可以去了解下。 那观察者模式在什么情况下使用呢? 观察者可以实现消息的广播,一个消息可以触发多个事件,这是 观察者模式非常重要的功能。 我们的观察者模式也是一样的问题,一个观察者可以有双 重身份,即使观察者,也是被观察者,这没什么问题呀,但是链一旦建立,这个逻辑就比较复杂,可维护性非常差,根据经验建议,在一个观察者模式中最多出现一个对象既是观察者也是被观察者

    56120发布于 2020-07-20
  • 来自专栏技术趋势

    设计模式-观察者模式

    用户关注公众号,公众号(被观察者)更新文章通知所有用户(观察者)。 观察者模式是什么? 观察者模式(Observer Pattern)它属于行为模式观察者模式可以干嘛? 观察者模式主要解决是一对多或者多对多之间依赖通知的问题。 个人理解: 观察者模式就类似于我们(观察者)订阅(监听)微信公众号(被观察者),微信公众号发布文章通知到我们,我们查阅。 观察者模式类图 ? "); } } 结果 用户:小明收到通知:观察者模式 用户:小红收到通知:观察者模式 用户:小绿收到通知:观察者模式 源码下载:https://gitee.com/hong99/design-model /issues/I1IMES 最后 观察者模式主要解决是一对多或者多对多之间依赖通知的问题,在redis订阅、邮件订阅、消息通知等者借鉴该模式的思想,所以该模式应用于实际工作中非常广泛,当然若日常开发遇到

    54320发布于 2020-09-18
  • 来自专栏Java架构师必看

    设计模式——观察者模式

    在软件设计中也是一样,例如:MVC 模式中的模型与视图的关系。此类场景使用观察者模式来实现的话,就非常方便。 观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式观察者模式是一种对象行为型模式观察者模式的优点如下:①、降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。②、目标与观察者之间建立了一套触发机制。 ③、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。 二、观察者模式的结构与类图 ---- 实现观察者模式时,需要注意具体目标对象和具体观察者对象之间不能直接调用,否则会使两者之间紧密耦合起来,这违反了面向对象的设计原则。

    39520发布于 2021-05-14
  • 来自专栏Android学习之路

    观察者模式

    观察者模式 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象,当主题对象在状态上发生改变时,通知所有的观察者对象,并让他们自动更新自己; 观察者模式的组成 抽象主题角色: 将所有的观察者引用存放到一个集合中 ,每个主题可以拥有任意数量的观察者;主题提供一个接口,用来增加,移除通知观察者。 一般用一个抽象类或接口来实现; 抽象观察者角色: 为所有的观察者定义一个接口,在得到主题通知时更新自己; 具体主题角色: 在具体主题状态发生改变时,通知所有登记过的观察者。 具体主题通常由一个子类实现; 具体观察者角色: 该角色实现抽象观察者角色所要求的更新接口,在得到主题通知时更新自己,让本身的状态和观察者的状态相协调。通常是一个自类实现。 程序实现 抽象观察者角色 /** * 抽象观察者接口 * Created by sky-mxc on 2016/12/25. */ public interface IObserver {

    603100发布于 2018-05-22
  • 来自专栏三太子敖丙

    观察者模式

    在设计模式中也有一种模式能有效的达到解偶、异步的特点,那就是观察者模式又称为发布订阅模式。 今天阿丙就分享一下实际开发中比较常见的这种模式 大纲 ? 定义 什么是观察者模式?他的目的是什么? 框架应用 观察者模式在框架的中的应用也是应该很多 第一种 熟悉JDK的人应该知道 在java.util 包下 除了常用的 集合 和map之外还有一个Observable类,他的实现方式其实就是观察者模式 respond to */ void onApplicationEvent(E event); } 第三种 Google Guava的事件处理机制Guava EventBus 他的实现也是采用设计模式中的观察者设计模式 看到这个问题 大家可能首先会想到用MQ消息处理呀,是的,用消息确实可以的,但是这里我们用观察者模式来实现这个问题,同时可以给大家演示一下,同步或者异步的问题。 总结 大家看完本篇文章不知道有发现没有,其实整个内容都是围绕了解耦的思想来写的,观察者模式作为行为型设计模式,主要也是为了不同的业务行为的代码解耦。

    53641发布于 2021-07-02
  • 来自专栏Czy‘s Blog

    观察者模式

    观察者模式 观察者模式Observer Pattern是一种对象行为型模式,当定义的对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新,观察者模式又叫做发布 描述 观察者模式建立了一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。 优点 观察者模式可以实现表示层和数据逻辑层的分离,并定义了稳定的消息更新传递机制,抽象了更新接口,使得可以有各种各样不同的表示层作为具体观察者角色。 观察者模式在观察目标和观察者之间建立一个抽象的耦合。 观察者模式支持广播通信。 观察者模式符合开闭原则的要求。 观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。 适用环境 一个抽象模型有两个方面,其中一个方面依赖于另一个方面。

    30720编辑于 2022-05-06
  • 来自专栏生如夏花的个人博客

    观察者模式

    观察者模式 模式定义 定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当注意对象发生变化时,它的所有依赖者都会收到通知并更新 应用场景 当更改一个对象的状态可能需要更改其他对象,并且实际的对象集事先未知或动态更改时 ,请使用观察者模式 优点 1.符合开闭原则 2.可以在运行时建立对象之间的关系 实现 //主题对象 class Subject{ //容器 List<ObServer> container for (ObServer obServer : container) { obServer.update(object); } } } //观察者

    37010编辑于 2022-05-05
  • 来自专栏java闲聊

    观察者模式

    观察者模式 概述 UML类图 代码栗子 总结 概念 概念 观察者模式又叫做发布-订阅模式观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新 栗如,抗日战争中我方地下党人会密切监视日军的一举一动,根据它们的战略部署及时做出相应的返回,这也就是观察者模式(我军->观察者;日军->被观察者) 作用 观察者和被观察者之间是抽象耦合 建立一套触发机制 image 代码栗子 观察者 注意这里的接口 Observer ,这是观察要实现的接口,JDK 原生提供了 观察者接口的定义,这里就直接使用JDK自带的 public class ClassLeader image.png 总结 观察者模式的应用极其广泛,但是要注意它的观察链(触发链),栗子 A观察B ,触发C; C观察D ,触发E;E观察F ,触发A; 这样一条触发链后期维护的成本很大 参考资料 书籍 《设计模式之禅》

    57020发布于 2019-04-17
  • 来自专栏小鑫同学编程历险记

    🔥【设计模式观察者模式

    1.0版本(双向耦合) 我们描述一个工作做的实际场景来说一说观察者模式,我们在公司的时候会加入很多的群,微信群、QQ群、企业微信群、钉钉群等,他们都有一些公共的功能,第一个功能是可以邀请员工加入,第二个功能是发布群公告来通知群成员 我们员工和工作群之间就形成了符合观察者模式的特点,多位员工关注(订阅)着群公告,工作群在有重要事件的时候进行信息的发布。 \n${this.swg.getNotice()}` ); } } 体验一下 我们在版本1.0的第二步将测试小李邀请入群吧 在我们将观察者抽象出来后不管是我们的测试小李,还是其他岗位的同事我们都可以用最小的改动来满足他们关注群公告的需求了 观察者模式也称为发布-订阅模式。 1. 观察者模式定义一对多的依赖关系,让多个观察者同时关注一个主题对象,并在主题对象发生变化后通知观察者尽心更新。 注:最近翻了翻好早前买的《大话设计模式》,感觉还有很有意思呀。

    37840编辑于 2022-12-26
  • 来自专栏技术之路

    设计模式观察者模式

    今天介绍另一种模式 观察者模式是我们经常用的一个模式,比如在用wcf做服务的时候通知客户端做一些操作一般用设计者模式。 今天做一个订报纸的小例子来理解一下观察者模式  出版者+订阅者=观察者模式                                 用下边的图来说就是    人民日报+订阅者=观察者模式 ? 下面我们就来用代码实现一下这个模式 //报纸接口 public interface INewsPaper { //添加订阅者 void RegisterSubscriber

    60150发布于 2018-01-31
  • 来自专栏Android开发实战

    设计模式-观察者模式

    01 前言 观察者模式是松偶合的。改变被观察者观察者中的一方,另一方不会受到影像。 JDK中也有自带的观察者模式。但是被观察者是一个类而不是接口,限制了它的复用能力。 Android中的EventBugs,RxBugs等优秀框架项目也都是基于观察者模式观察者模式是一对多的。 观察者模式中有被观察者(Observerable)和观察者(Observer).观察者模式定义了对象之间的一对多的依赖关系,这样,当"一"的一方状态发生变化时,它所依赖的"多"的一方都会收到通知并且自动更新 其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。 ? 02 观察者模式结构图 ? 通过结构图可以看到,该模式包含四个角色: 抽象被观察者角色:也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者

    52330发布于 2018-10-22
  • 来自专栏余林丰

    观察者模式

    订阅者模式通常也成为发布-订阅模式,发布者也称为通知者,订阅者也称为观察者。通知者发出通知,各发布者则收到通知后做出相应的动作。由于存在不同的订阅者和通知者,所以将这两者抽象出来。 (observer); 16 concreteSubject.notifyObservers(); 17 } 18 } 输出结果: image.png 这样我们就简单地完成了观察者模式 在《大话设计模式》中提到了,如果观察者是几个风马牛不相及的呢?我们现在是抽象成一个公共类,如果两个观察者无法抽象成一个公共类怎么办呢? 《大话设计模式》中提到了利用“事件委托”来实现,由于此书是C#,但在Java中好像并没有线程的事件委托实现,在下一篇中会写利用“事件委托”来实现观察者模式,同样Java自带了Observer接口以提供对观察者模式的支持 ,下一篇我们也会利用JDK来实现观察者模式

    97670发布于 2018-01-09
  • 来自专栏JavaEdge

    观察者模式

    观察者模式从名字上来看大概就是一种通知与被通知的关系,其实代码思想也与其差不多,其核心思想就是有一个或N个观察者(Observer)和一个(或N个)被观察者(Observable 或 Subject), 观察者以订阅方式来观察被观察者,当被观察者接到更新时(程序员控制或代码自动发出)将通知所有观察者来接受更新的内容。 观察者模式是另一种可被Lambda 表达式简化和改进的行为模式。在观察者模式中,被观察者持有一个观察者列表。当被观察者的状态发生改变,会通知观察者观察者模式被大 量应用于基于MVC 的GUI 工具中,以此让模型状态发生变化时,自动刷新视图模块,达到二者之间的解耦。 观看GUI 模块自动刷新有点枯燥,我们要观察的对象是月球! ; }); moon.land("An asteroid"); moon.land("Apollo 11"); 还有一点值得思考,无论使用观察者模式或策略模式,实现时采用Lambda 表达式还是传统的类

    92470发布于 2018-05-16
  • 来自专栏大数据那些事

    观察者模式

    观察者模式需要如下几个对象构建出整个框架: 1抽象主题角色:提供了一个用于保存观察者对象的聚集类和增加删除观察者对象的方法,以及通知所有观察者的抽象方法 2具体主题:具体目标类,实现抽象主题的类 3抽象观察者:是一个抽象类接口,包含一个更新自己的抽象方法,更改通知时随时被调用 4具体观察者 具体例子 import java.util.ArrayList; import java.util.Iterator "; peopleDaily.notifyObserver(); } } // 抽象主题 abstract class WeChatSubscribe { // 定义观察者集合 AbstractOB> observers = new ArrayList<AbstractOB>(); public String sendMessage = ""; // 添加观察者方法 public void add(AbstractOB observer) { observers.add(observer); } // 移出观察者方法

    61020编辑于 2022-05-11
领券