观察者模式

设计模式

给你一囗甜甜゛ 提交于 2019-11-28 10:35:35
目录 设计原则 设计模式 策略模式 观察者模式 定义 实现方式 装饰者模式 定义 设计思路 设计原则 封装变化:将可能发生变化的部分独立出来 多用组合,少用继承 针对接口编程,而不针对实现编程 松耦合设计 开放-关闭原则:对扩展开发,对修改关闭 设计模式 策略模式 定义一组可以互相替代的算法组,利用多态将具体实现隐藏 观察者模式 定义 观察者模式定义了对象之间的一对多依赖,当对象状态改变时,它的所有依赖者都会收到通知并自动更新。 实现方式 观察者模式在Java里有两种实现方式:Java内置观察者模式、自定义观察者模式 Java内置的观察者模式用到了Observer接口和Observable 类 ,由于Observable是类,限制了复用。 自定义观察者模式: Observable接口应该具备的方法:addObserver, removeObserver, notifyObservers;属性:List Observer接口应该具备的方法:update 装饰者模式 定义 动态的将行为附加到对象上,对对象功能进行扩展 设计思路 装饰者需要与被装饰者有相同的类型,并且被装饰者以组合的方式嵌入到装饰者中,然后在实现的方法中调用被装饰者的方法,达到扩展功能的目的。 相同的类型? 来源: https://www.cnblogs.com/darknessplus/p/11405124.html

设计模之观察者模式上篇

允我心安 提交于 2019-11-28 07:19:24
观察者模式上篇 观察者模式原理: 大家好,欢迎来到污污弹公司,最近啊,污污弹接到气象站的外包项目。 功能比较简单: 要对外提供天气接口(温度、气压、湿度)需要实时通知第三方; 还需要实时在市中心公告栏上发布天气情况。 司小司接到任务开始动手干了。根据Java面向对象特性分析后得到如下信息: 天气对象:WeatherData 公告板对象:CurrentConditions 天气更新时候,调用天气对象的dataChange方法,得到数据后,然后将数据通过display()方法展示出来。 根据上面信息,我们可以创建以下两个类: 天气对象: ​ 观察者模式上篇 观察者模式原理: 大家好,欢迎来到污污弹公司,最近啊,污污弹接到气象站的外包项目。 功能比较简单: 要对外提供天气接口(温度、气压、湿度)需要实时通知第三方; 还需要实时在市中心公告栏上发布天气情况。 司小司接到任务开始动手干了。根据Java面向对象特性分析后得到如下信息: 天气对象:WeatherData 公告板对象:CurrentConditions 天气更新时候,调用天气对象的dataChange方法,得到数据后,然后将数据通过display()方法展示出来。 根据上面信息,我们可以创建以下两个类: 天气对象: @Data public class WeatherDataOO { public WeatherDataOO ()

Vue 双向绑定原理

旧城冷巷雨未停 提交于 2019-11-28 06:15:48
源代码当中会有一个观察者模式,主要负责观察你的数据是否发生变化 他是通过Object.defineProperty来实现判断。当你的数据发生变化的时候,他会执行到处理器当中 的set,set发生变化之后,他会通知其相对应的订阅者,而这个订阅者是你数据下面的DOM操作, 具体就是执行这个DOM下面的update函数 来源: https://www.cnblogs.com/zcccz/p/11396847.html

观察者模式和发布订阅模式

若如初见. 提交于 2019-11-28 05:12:23
第22题:介绍下重绘和回流(Repaint&Reflow),以及如何进行优化? 答: 关于重绘和回流 第23题:介绍下观察者模式和订阅-发布模式的区别,各自适用于什么场景? 答: 观察者模式和发布订阅模式 第24题:聊聊Redux和Vuex的设计思想? 答: 把组件之间需要共享的状态抽取出来,遵循特定的约定,统一来管理,让状态的变化可以预测。 组件不允许直接修改属于store实例的state,组件必须通过action来改变state 第25题:说说浏览器和Node事件循环的区别? 答: 其中一个主要区别在于浏览器的event loop和nodejs的event loop在处理异步事件的顺序上是不同的。nodejs中有micro event;其中promise属于micro event,该异步事件的处理顺序就和浏览器不同。 nodejs v11.0以上版本,这两者之间的顺序就相同了。 参考文章: https://juejin.im/post/5d23e750f265da1b855c7bbe#heading-25 来源: https://www.cnblogs.com/cathy1024/p/11378658.html

观察者模式和发布订阅模式

与世无争的帅哥 提交于 2019-11-28 05:07:29
观察者设计模式 观察者模式是一种软件设计模式。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实时事件处理系统。 简单来说就是,一个对象(被观察者)的状态发生改变时,会通知所有依赖它的对象(观察者),这两者是直接关联的。 如图所示,当Subject(被观察者)状态发生变化时,会给所有的Observers(观察者们)发送一个通知函数,观察者们接收到通知后通常会调用各自的更新函数。 发布-订阅设计模式 订阅发布模式是一种消息范式。消息的发送者(发布者)不会将消息直接发送给特定的接收者(订阅者)。而是将发布的消息分为不同的类别,无需了解哪些订阅者可能存在。同样的,订阅者可以表达对一个或多个类别的兴趣,只接收感兴趣的消息,无需了解哪些发布者存在。 在发布-订阅模式中,消息的发送方叫做发布者(publishers),消息不会直接发送给特定的接收者,叫做订阅者。 发布者和订阅者不知道对方的存在。需要一个第三方组件,叫做信息中介,它将订阅者和发布者串联起来,它过滤和分配所有输入的消息。 发布-订阅模式用来处理不同系统组件的信息交流,即使这些组件不知道对方的存在。 如上图所示,发布者与订阅者之间不是互相依赖和关联的,两者之间有一个通信结构(事件通道)

Spring中的观察者模式(发布订阅模式)(基于SpringBoot实现)

烈酒焚心 提交于 2019-11-28 03:24:25
概述:    spring中的事件机制涉及到者几个类文件 :ApplicationEvent(事件类型)、ApplicationListener(事件监听类)、ApplicationEventPublisher(事件发布类)。    ApplicationEvent:继承jdk Utill包中的 EventObject。   ApplicationListener :接口继承了utill 包中的EventListener接口,泛型参数E必须继承ApplicationEvent类。   ApplicationEventPublisher: 事件发布接口 ,实现类很多,其中子类ApplicationContext,发布事件就用ApplicationContext类去发布。 举例:    在实际开发中,有一个这样的例子,当下单成功后会发送手机短信、发送绑定邮箱、微信、等 示例代码: pom文件 1   <parent> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-parent</artifactId> 4 <version>1.5.9.RELEASE</version> 5 </parent> 6 <dependencies> 7 <dependency> 8

java设计模式----观察者模式

允我心安 提交于 2019-11-27 23:50:06
观察者模式也称为订阅发布模式,比较好理解,就是订阅发布这几个步骤,发布的时候可以选择删除增加和通知订阅人。看代码 抽象主题 ,包含增加删除通知功能抽象接口 package watcher; /** * 抽象主题,接口包含增加删除通知观察者功能,类似订阅内容。 * @author mercy * */ public interface Watched { //增加订阅者 public void addWatcher(Watcher watcher); //删除订阅者 public void deleteWatcher(Watcher watcher); //通知订阅者内容 public void notifyWatchers(String str); } 具体主题, 接口的具体的实现 package watcher; import java.util.ArrayList; import java.util.List; /** * 具体主题,发布通知,抽象主题的具体实现 * @author mercy * */ public class ConcreteWatched implements Watched{ List<Watcher> list=new ArrayList<Watcher>(); @Override public void addWatcher(Watcher

观察者模式

戏子无情 提交于 2019-11-27 20:11:17
观察者模式 /*--> */ /*--> */ 观察者模式 Table of Contents 1 观察者模式概述 1.1 jdk中观察者模式实现 2 java中观察者模式应用 2.1 swing事件驱动编程 2.2 监听器和监听器模式 2.3 Servlet中的listener 3 c#中的委托和事件 1 观察者模式概述 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图 (Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察 者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个 主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 观察者模式被称为是模式中的皇后,而且java jdk也对它做了实现,可见该设计模式的重 要位置。在图形化设计的软件中,为了实现视图和事件处理的分离,大多都采用了 Observer模式,比如java的Swing,Flex的ActionScript等。在现实的应用系统中也有好多 应用,比如像当当网、京东商城一类的电子商务网站,如果你对某件商品比较关注,可以 放到收藏架,那么当该商品降价时,系统给您发送手机短信或邮件。这就是观察者模式的 一个典型应用,商品是被观察者,有的叫主体

观察者模式

ⅰ亾dé卋堺 提交于 2019-11-27 20:09:21
观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,他的所有依赖者都会受到通知并自动更新。 特点: 1.观察者模式定义了对象之间一对多的关系。 2.主题(也就是可观察者)用一个共同的接口来更新观察者。 3.观察者和可观察者用松耦合的方式结合,可观察者不知道观察者的细节,只知道观察者实现了观察者接口 4.有多个观察者时,不可以依赖特点的通知次序。 定义观察者模式:类图 观察者模式的组成 1.抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类或接口来实现 2.抽象观察者角色:所有潜在的观察者都必须实现观察者接口,这个接口只有update()一个方法,当主题状态改变时它被调用。 3.具体主题角色(Watched):一个具体主题总是实现主题接口,除了注册和撤销方法之外,具体主题还实现了notifyObservers()方法,此方法用于在状态改变时更新所有当前观察者。 4.具体观察者角色(Watcher):为所有具体的观察者定义一个接口,在得到主题的通知时更新自己。观察者必须注册具体主题,以便接受更新。 这个只是一个主题与观察者的设计,观察者自身还需要将信息显示出去。那么再用一个接口,专门来实现展示的功能。 源码实现: /** * 主题 */ public

Spring Cloud 笔记之Spring cloud config client

假如想象 提交于 2019-11-27 19:19:02
观察者模式它的数据的变化是被动的。 观察者模式在java中的实现: package com.hxq.springcloud.springcloudconfigclient; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class SpringEventListenerDemo { public static void main(String[] args) { AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(); //注册监听器 annotationConfigApplicationContext.addApplicationListener(new ApplicationListener<MyApplicationEvent>() { /** * 监听器得到事件 * @param applicationEvent */ @Override public void