首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

观察者模式的使用

观察者模式 观察者模式符合设计模式中的开闭原则,同时观察者模式在使用时可以随着系统的启动,起到刷新的作用。...说到底就是对配置信息、需要随系统启动而进行改变的数据进行统计的时候,此时就可以使用观察者模式。当然除此之外,基于观察者模式组合@PostConstruct注解启动一些定时任务或者服务。...观察者模式在业务系统中的使用 在我目前做的系统中存在很多这样的场景,而这些场景都是基于观察者模式实现的: 比如我们自助称量、排床的过程中,我们需要对医院排床数据、医院编号会进行默认配置操作,此时就需要用到...后面我们来了解netty的使用场景和在业务项目中的使用。 什么时候应该使用观察者模式 比如配置信息在系统启动的时候可以进行加载,此时可以使用。...比如对一些默认的配置信息需要在启动的时候基于观察者模式进行实时更新,此时可以使用观察者模式。 参考: Spring源码深度解析 郝佳

45810

设计模式之观察者模式(Observer Pattern)现实模拟观察者模式定义观察者实现的设计原则代码实现小结

在正式介绍观察者模式前,我们先引用生活中的小例子来模拟观察者,先对观察者模式有一个整体的感觉。 现实模拟 报纸和杂志的故事。...报社出版者被认为是观察者模式中的Subject,订阅报纸的人被认为是观察者模式中的Observer。具体的观察者模式的subject和observer我们后面会介绍。...观察者模式定义 观察者模式是设计模式中很常用的一个模式。 比较严格的解释是:** 观察者模式定义了对象之间的一对多的依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。...Paste_Image.png 跟图中的例子一样,主题和观察者定义了一对多的关系。观察者依赖于此主题,只要主题状态一有变化,观察者就会被通知。 观察者模式的类图可以很好的观察者模式的设计思想 ?...观察者实现的设计原则 ** 观察者模式提供了一种对象设计,让主题和观察者之间松耦合 ** 关于观察者的一切,主题只需要知道观察者实现了某个接口也就是Observer接口,主题不需要知道观察者的具体的实现类是谁

40920
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    观察者模式是非常常用的设计模式_实现一个观察者模式

    大家好,又见面了,我是你们的朋友全栈君。 好久没有写博客啦,之前看完了《设计模式之禅》也没有总结一下,现在回忆一下设计模式之观察者模式。...1.什么是观察者模式   简单情形:有A、B、C、D等四个独立的对象,其中B、C、D这三个对象想在A对象发生改变的第一时间知道这种改变,以便做出相应的响应或者对策。   ...上面的这种情形,就是观察者模式。   当然可以有多个观察者,多个被观察者。 观察者与被观察者也不是对立的,一个对象可以观察其他对象,也可以被其他对象观察。...2.观察者模式的应用 为了更好的理解什么是观察者模式,下面我举一些可能用到该模式的情形或例子:   (1)周期性任务。...3.2 java.util.Observer     这个是观察者,是接口。程序中的观察者类,需要实现这个接口中的update()方法。

    23020

    观察者模式实战:真实项目中屡试不爽的瓜娃EventBus到底如何实现观察者模式的?

    这里只是简单的举个栗子,说明下业务场景。 针对这个业务场景,最开始的想法是尽量少的侵入原有业务方法,所以这里选择使用观察者模式。 原有业务场景中加入发布事件的能力,然后订阅者自己消费进行埋点数据逻辑。...做到尽可能的业务解耦。 观察者模式 这里还是要多啰嗦几句,说下观察者模式原理: 所谓的观察者模式也称为发布订阅模式,这里肯定至少存在两种角色:发布者/订阅者 接着看下UML图: ?...话不多说,我们自己动手来模拟一个简单的观察者模式: /**  * 观察者模式测试代码  *  * @author wangmeng  * @date 2020/4/25 19:38  */ public...Guava中观察者模式的使用实现原理。...总结 这里主要是整理了guava 中实现观察者模式的使用及原理。 大家如果有类似的业务场景也可以使用到自己项目中。

    1.2K10

    设计模式(二):自己动手使用“观察者模式”实现通知机制

    今天博客的主题是“观察者模式”(Observe Pattern),所以我们要先通过一个小的Demo来理解一下“观察者模式” ,当然使用的是Swift语言来实现的(语言只是载体呢,主要还是模式不是)。...通过一个小Demo对“观察者模式”进行学习后,紧接着会看一下在Swift中是如何使用Foundation框架中的通知的,并给出相应的示例。...下方就是我们将要实现的“类图”。当然下方的的结构有很大的重构空间的,下方的基类完全可以使用protocol来实现的,但是为了简化结构我们用了简单的继承。但是下方示例是完全可以来表示“观察者模式”的。...2.Foundation框架中的通知的使用 (1)创建Subject Foundation中自带的通知机制使用起来比较简单的,我们暂且将发送消息的称为Subject,通知的观察者称为Observer。...然后使用静态方法defaultCenter()来返回一个当前类的静态实例,下方就是Swift中比较简单的“单例模式”了。 ?

    1.6K60

    java行为型模式-观察者模式的使用(一)

    在一对多依赖的对象关系中, 如果这个'一'对象状态发生了变化,那么它所有依赖的'多'对象都应该被通知,然后做相应的变化,这就是观察者模式. 就如同'多'对象一直在观察'一'对象的状态变化一样....在一对多依赖的对象关系中, 如果这个'一'对象状态发生了变化,那么它所有依赖的'多'对象都应该被通知,然后做相应的变化,这就是观察者模式. 就如同'多'对象一直在观察'一'对象的状态变化一样....在观察者模式中最重要的俩个对象分别是:Observable和Observer对象.它们的关系可总结如下: 1....Observable对象不会主动去通知各个具体的Observer对象其状态发生了变化,而是提供一个注册接口供Observer对象使用,任何一个Observer对象如果想要被通知,则可以使用这个接口来注册...下面用实例来实现一下观察者模式: 股票系统 所有的类如下: StockData (Observable对象,也就是所股票数据发生了变化,它就要通知所有和它有关系的交易实体做相应的变化) BigBuyer

    41820

    美团二面:如何优雅使用观察者模式

    如何使用观察者模式?项目中应该如何应用?...观察者设计模式大纲如下: 什么是观察者模式 观察者模式代码如何写 如何使用观察者模式结合业务 Guava EventBus 观察者模式 Spring ApplicationEvent 事件模型 观察者模式最后的总结...如果发现犯罪嫌疑人阿祖有动静,龙哥、峰哥负责实施抓捕行动,老三向警察局摇人,流程图如下: 如果说使用常规代码写这套流程,是能够实现需求的,一把梭的逻辑可以实现一切需求。...接下来就需要实际操练一番,注册这些观察者,通过被观察者触发事件来通知观察者 如何实现开闭原则 看了应用的代码之后,函数体过大的问题已经被解决了,我们通过 拆分成为不同的具体的观察者类 来拆分总体逻辑。...、最功能的设计,如果想要玩耍观察者模式推荐指数 如果想要使用 ApplicationEvent 玩转观察者模式,只需要简单几步。

    1.5K42

    记一次观察者模式的使用

    一、引入: 今天做播放器时碰到了一个小问题: 有三个地方需要同一组数据,而且分属不同地方,如何同步? 当然有很多方法可以实现,本文主要讲观察者模式,也算是回虐它吧(曾经被它吊打...)...注意,本文使用的是测试代码,仅是模拟情况(Android上的使用道理是一致的,已实证) 数据同步 把问题简化为下面7个类: 需求:数据在SongSubject中的改变,可以通知三个观察者,并同时更新数据...问题抽离 二、观察者模式: 一对多--一人提供信息(Subject),多人需求信息(Observer),信息体(T) T发生改变时,由Subject统一提醒Observer 1.接口层:Observer...("HomeListFragment:" + song); } } 7.主页面观察者实现类 主要绑定逻辑在模仿的onCreate里,当然mpv里,你可以根据实际情况 /** * 作者:张风捷特烈...三个界面的信息会同步变化,这就是观察者模式优秀的地方 毕竟实际中Pop弹框,Activity,Fragement分属不同类,能够这样统一变化会减少耦合 3.小结 设计模式还是在需要的时候能理解的清晰一些

    49430

    【Go实现】实践GoF的23种设计模式:观察者模式

    上一篇:【Go实现】实践GoF的23种设计模式:装饰者模式 简单的分布式应用系统(示例代码工程):https://github.com/ruanrunxue/Practice-Design-Pattern...UML 结构 场景上下文 在 简单的分布式应用系统(示例代码工程)中,应用之间通过 network 模块来通信,其中通信模型采用观察者模式: 从上图可知,App 直接依赖 http 模块,而 http...下面,我们通过 简单的分布式应用系统(示例代码工程)中的 mq 模块,展示一个简单的发布-订阅模式实现,在该实现中,我们将 Publisher 的 produce 方法和 Subscriber 的 consume...Push 模式 VS Pull 模式 实现观察者模式和发布-订阅模式时,都会涉及到 Push 模式或 Pull 模式的选取。...与其他模式的关联 观察者模式和发布-订阅模式中的 Subject 和 Broker,通常都会使用 单例模式 来确保它们全局唯一。

    36700

    Android--源码分析Handler巧妙的观察者模式及手写简单实现Handler

    我当时就很疑惑,线程间本来就是资源共享的,谈何怎么通信,调用线程的方法或者改变线程的变量值就可以实现通信了,只不过需要自己做一些线程同步的处理。...对我们来说,Hanlder机制只是安卓SDK封装了一个线程通信的工具罢了,它通过生产者消费者模式处理了多线程同步,当然了它封装的功能很强大 网上关于Handler的源码分析已经有很多了,自己看了源码后,...也想做个总结,今天利用时序图和流程图来做一个简单分析,尽量使用简洁易懂的方式来帮助理解 一、Handler源码分析 1.Looper创建及启动轮询 Java程序的入口为main函数,每个App都是一个单独的...Java程序,App启动流程涉及到底层dalvik/art虚拟机的fork进程,跨进程通信等,暂不深入探究。...这套架构的精髓是handler即作为被观察者,又作为观察者 Handler机制简单理解 二、手写Handler机制 有了上面的基础后,简单的手写一个Handler机制 1.定义Message类 /**

    50120

    OC观察者模式之KVO的使用与思考

    开发中的一种常用模式之一:观察者模式之KVO。...目录: 1、KVO的作用 2、KVO的使用方法 3、KVO的实现原理 4、KVO与KVC、代理、通知的区别 5、KVO实现过程中的注意事项 无论用哪种语言进行软件开发,我们都会接触到设计模式,个人认为设计模式存在的意义在于...:在某些需求下,采用适合的设计模式,使代码结构合理,从而提高代码的可读性、可扩展性、可移植性,此文将要讨论的是iOS开发中的一种常用模式之一:观察者模式之KVO。...3.KVO的实现原理 当某一个类的实例第一次使用KVO的时候,系统就会在运行期间动态的创建该类的一个派生类,该类的命名规则一般是以NSKVONotifying为前缀,以原本的类名为后缀。...并且将原型的对象的isa指针指向该派生类。同时在派生类中重载了使用KVO的属性的setter方法,在重载的setter方法中实现真正的通知机制,正如前面我们手动实现KVO一样。

    1.5K30

    kotlin--使用观察者、装饰模式实现响应式风格架构

    RxJava就是一种响应式编程框架,利用观察者、装饰模式来实现上下流消息通信和函数式编程,解决了上下流解耦、回调地狱等,其中的思想很值得我们学习,今天来模拟实现RxJava的架构 一、观察者与被观察者...(observer) // 回调下订阅成功函数 observer.onSubscribe() } } 到这里我们基本实现了观察者模式,使用方法如下: public...: 二、封装被观察者 上面代码在创建订阅关系时,直接创建了一个被观察者类的匿名实现,我们可以继续对观察者进行封装,不对外暴露被观察者 1.定义发射器接口 内部使用发射器,来替换直接调用观察者的方法,发射器拥有和观察者相同的一部分方法...目前上流被观察者发送的数据和下流观察者接收的数据是相同类型的,在实际开发中,很可能会对该数据类型进行转换,我们不希望在观察者中进行转换,因为这样的代码结构显得不优雅,而且其转换过程可能是异步的,那么如何在上流就进行转换...数据转换接口实现类 实例化一个观察者,对原来的被观察者进行订阅,并在该观察者方法中使用数据转换函数后,调用外部传入的观察者的方法 /** * 转换后新的被观察者,就是将原来的被观察者装饰了下 */

    56520

    用最简单的例子说明设计模式(二)之模版方法、策略模式、组合模式、观察者模式

    模板方法模式 提供一个抽象类,将部分逻辑以具体方法或构造器的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法(多态实现),从而实现不同的业务逻辑。...让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。  ...一个类定义了多种行为,并且这些行为在这个类的方法中以多个条件语句的形式出现,那么可以使用策略模式避免在类中使用大量的条件语句。...观察者模式在android中的实际运用:回调模式 回调模式:实现了抽象类/接口的实例实现了父类的提供的抽象方法后,将该方法交还给父类来处理。...事件),就由专用的观察者模式(例如只用于监听控件点击)转变成了通用的观察者模式。

    1.1K70

    用最简单的例子说明设计模式(二)之模版方法、策略模式、组合模式、观察者模式

    模板方法模式 提供一个抽象类,将部分逻辑以具体方法或构造器的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法(多态实现),从而实现不同的业务逻辑。...让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。...一个类定义了多种行为,并且这些行为在这个类的方法中以多个条件语句的形式出现,那么可以使用策略模式避免在类中使用大量的条件语句。...观察者模式在android中的实际运用:回调模式 回调模式:实现了抽象类/接口的实例实现了父类的提供的抽象方法后,将该方法交还给父类来处理。...事件),就由专用的观察者模式(例如只用于监听控件点击)转变成了通用的观察者模式。

    23720

    工厂模式、单例模式、策略模式、适配器模式、观察者模式的原理和使用详解

    ($a); // object(A)#1 (0) {} var_dump($b); // object(A)#2 (0) {} 单例模式的定义 单例模式的入门口诀是:三私一公 私有的构造方法: 防止人为外部使用...new 进行创建这就是上面普通内的实例化了 私有的克隆方法: 防止人为外部使用 clone 方法后进行实例化 私有的静态属性: 用来存储单一的实例化对象 公有的静态方法: 用来实现单一的实例化逻辑 从结果来看...﹕两个类的对象内存空间都指向了 #1,实现了单例模式的基础构建 getString(); var_dump($result); ✨ 观察者模式 观察者模式的原理 作用: 用来监控用户的某些操作,然后根据用户这些操作来处理一些后续的事情 举个例子...php // 系统自带的观察者接口 // 默认需要实现 onListen 和 getObserverName 这两个方法 // 如果是自定义观察者接口名,一定要实现onListen同功能的方法 // onListen

    1.3K103

    使用C# (.NET Core) 实现观察者模式 (Observer Pattern) 并介绍 delegate 和 event

    观察者模式 这里面综合了几本书的资料....初版代码 这个地方有个"错误", xxxDisplay都是具体的实现, 而编程规则要求是应该对接口编程而不是对实现编程. 那么什么是观察者模式?...松耦合设计可以让我们设计出这样的系统: 因为对象之间的相互依存减小了, 所以系统可以轻松处理变化. 重新设计: 代码: OK, 上面是书中的内容, C#7.0里面对观察者模式是怎么实现的呢?...Event 使用委托的时候, 通常会有两个角色出现: 广播者(被观察者)和订阅者(观察者) [观察者模式] 广播者包含一个委托field, 广播者决定何时广播, 它通过调用委托进行广播....订阅者就是方法的目标接收者.订阅者可以决定何时开始和结束监听, 是通过在广播者的委托上使用+=和-=操作符来实现的.

    79240
    领券