Observer

BehaviorSubject vs Observable?

守給你的承諾、 提交于 2020-02-27 22:54:55
我正在研究Angular RxJs模式,我不明白 BehaviorSubject 和 Observable 之间的区别。 根据我的理解, BehaviorSubject 是一个可以随时间变化的值(可以订阅,订阅者可以接收更新的结果)。 这似乎是 Observable 的完全相同的目的。 你什么时候使用 Observable 和 BehaviorSubject ? 在 Observable 上使用 BehaviorSubject 是否有好处,反之亦然? #1楼 Observable对象表示基于推送的集合。 Observer和Observable接口为基于推送的通知提供了一种通用机制,也称为观察者设计模式。 Observable对象表示发送通知的对象(提供者); Observer对象表示接收它们的类(观察者)。 Subject类继承Observable和Observer,因为它既是观察者又是observable。 您可以使用主题订阅所有观察者,然后将主题订阅到后端数据源 var subject = new Rx.Subject(); var subscription = subject.subscribe( function (x) { console.log('onNext: ' + x); }, function (e) { console.log('onError: ' + e

JS设计模式入门和框架中的实践

十年热恋 提交于 2020-02-27 08:29:55
JS设计模式入门和框架中的实践 在编写JS代码的过程中,运用一定的设计模式可以让我们的代码更加优雅、灵活。 下面笔者就结合诸如redux的subscribe、ES6的class、vue里面的$dispatch、jquery里面的on/off来给大家简单介绍下设计模式在这些库、语法和框架中的使用。 设计模式解决的问题 设计模式并不是很玄乎的知识,很多同学在编写JS代码的时候已经在不经意间用了不少设计模式了。 笔者认为把设计模式单独抽象出来探讨,就和算法中抽象出来冒泡、排序一样,是为了描述一种常用的JS pattern。 通过研习这类pattern,让模式来指导我们的代码结构及JS算法。 一些常用的设计模式概述 1、observer [观察者模式] 根据状态的变化主动触发观察者队列、hashMap的回调行为 一个简单的观察者模式代码实践 class StateTracker{ constructor(){ this.observers = []; this.internalState= 10; } // 改变内部状态,触发状态的观察者列表 change(val){ this.internalState= val; this.observers.forEach(observer=>observer(val)); }// 注册观察者 registerObserver(ObserverFn)

zookeeper与cap

ε祈祈猫儿з 提交于 2020-01-08 15:52:15
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. 说一说cap 一个分布式系统最多只有同事满足一致性(Consistency),可用性(Availability)和分区容错性(Partition tolearance)这三项的两项。 ①. Consistency一致性 一致性分为强一致性,弱一致性,最终一致性 比如有一个系统(MySQL-a,mysql-b),MySQL-a中有一份数据初始化为1,现在有一个user,user有两个步骤: 修改mysql集群中的数据为2;(假设,修改的mysql-a,mysql-b中的更改需要同步) 读取mysql集群中的数据;(假设,读取的是mysql-b) 如果: 强制要求步骤2读取的时候,一定要读取的是2,不能读取到的是1,那么要求mysql之间的同步非常迅速或者在步骤2上加锁以等待数据同步完成,那么这种叫强一致性; 允许步骤2读取的时候,可以读取1,那么这叫弱一致性,其实不就是不需要要一致; 允许步骤2读取的时候,可以先读到1,过一会儿再读到2,那么这种叫最终一致性,就是可以等待一段时间才一致。 cap中的一致说的是强一致性。 ②. Availability可用性 可用性指的是服务可以一直可用,而且是正常响应时间。 好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。

Rxjava2 介绍与详解实例

依然范特西╮ 提交于 2020-01-07 02:00:16
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 现在我们可以看到越来越多的开发者都在使用 Rx 相关的技术进行 App,Java 后端等领域进行开发。在开源的社区以及互联网公司,Rx、响应式编程、函数式都是热门的存在。所以笔者将结合自身的学习以及实际使用情况,写一个针对 Rxjava2 的系列文章,一起学习和使用 Rxjava 所带来的便捷。 笔者将利用工作之余,结合 ReactiveX 官方 Wiki 对 Rxjava 的定义与介绍,对相关基础知识、基本操作,常用部分的 API 进行整理,并加上个人理解和相关操作的示例。 相关参考链接: 官网 Wiki GitHub Api-Doc Rxjava2 系列文章目录: Rxjava2 介绍与详解实例 Rxjava2 Observable的创建详解及实例 Rxjava2 Observable的数据变换详解及实例(一) Rxjava2 Observable的数据变换详解及实例(二) Rxjava2 Observable的数据过滤详解及实例(一) Rxjava2 Observable的数据过滤详解及实例(二) Rxjava2 Observable的结合操作详解及实例 Rxjava2 可连接的Observable(ConnectableObservable)操作详解及实例 Rxjava2

mvvm

99封情书 提交于 2019-12-28 17:06:22
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 模型,视图,视图模型 在vue中:Model:指的是js中的数据,如对象,数组等等。 View:指的是页面视图 viewModel:指的是vue实例化对象 主流框架实现双向绑定(响应式)的做法: 1. 脏值检查 :angular.js 是通过脏值检测的方式比对数据是否有变更,来决定是否更新视图,最简单的方式就是通过 setInterval() 定时轮询检测数据变动,当然Google不会这么low,angular只有在指定的事件触发时进入脏值检测,大致如下: DOM事件,譬如用户输入文本,点击按钮等。( ng-click ) XHR响应事件 ( $http ) 浏览器Location变更事件 ( $location ) Timer事件( $timeout , $interval ) 执行 $digest() 或 $apply()在 Angular 中组件是以树的形式组织起来的,相应地,检测器也是一棵树的形状。当一个异步事件发生时,脏检查会从根组件开始,自上而下对树上的所有子组件进行检查,这种检查方式的性能存在很大问题。 2.观察者-订阅者 (数据劫持): Observer 数据监听器 ,把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用

Vue原理解析(七):全面深入理解响应式原理(下)-数组进阶篇

佐手、 提交于 2019-12-23 17:46:09
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 上一篇: Vue原理解析(六):全面深入理解响应式原理(上)-对象基础篇 再初步了解了响应式的原理后,接下来我们深入响应式,解析数组响应式的原理。 数组更新 首先来看下改变数组的两种方式: export default { data() { list: [1, 2, 3] }, methods: { changeArr1() { // 重新赋值 this.list = [4, 5, 6] }, changeArr2() { // 方法改变 this.list.push(7) } } } 对于这两种改变数据的方式, vue 内部的实现并不相同。 方式一:重新赋值 实现原理和对象是一样的,再 vm._render() 时有用到 list ,就将依赖收集起来,重新赋值后走对象派发更新的那一套。 方式二:方法改变 走对象的那一套就不行了,因为并不是重新赋值,虽然改变了数组自身但并不会触发 set ,原有的响应式系统根本感知不到,所以我们接下来就分析, vue 是如何解决使用数组方法改变自身触发视图的。 Dep收集依赖的位置 上一篇它的声音并不大,现在我们来重新认识它。 Dep 类的主要作用就是管理依赖,在响应式系统中会有两个地方要实例化它,当然它们都会进行依赖的收集,首先是之前具体包装的时候: function

[Vue源码]一起来看Vue双向绑定原理-数据劫持和发布订阅

爱⌒轻易说出口 提交于 2019-12-17 22:24:30
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 有一段时间没有更新技术博文了,因为这段时间埋下头来看Vue源码了。本文我们一起通过学习双向绑定原理来分析Vue源码。预计接下来会围绕Vue源码来整理一些文章,如下。 一起来看Vue双向绑定原理-数据劫持和发布订阅 一起来看Vue模板编译原理(一)-Template生成AST 一起来看Vue模板编译原理(二)-AST生成Render字符串 一起来看Vue虚拟DOM解析-Virtual Dom实现和Dom-diff算法 这些文章统一放在我的git仓库: https://github.com/yzsunlei/javascript-series-code-analyzing 。觉得有用记得star收藏。 简单应用 我们先来看一个简单的应用示例: <div id="app"> <input id="input" type="text" v-model="text"> <div id="text">输入的值为:{{text}}</div> </div> <script> var vm = new Vue({ el: '#app', data: { text: 'hello world' } }) </script> 上面的示例具有的功能就是初始时,'hello world'字符串会显示在input输入框中和div文本中

java设计模式详细讲解-观察者模式

家住魔仙堡 提交于 2019-12-16 09:17:45
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 原文链接:java设计模式详细讲解-观察者模式 如果想要更加详细的 Java中的23种设计模式视频资源,请点击链接:Java中的23种设计模式视频资源下载 1、观察者模式原理: 对象之间存在多对一的依赖院系,被依赖方向多个依赖放分发、发布事件时的一种程序设计解决方案,此时,被依赖方的对象称之为Subject,依赖放的对象称之为ObServ er,Subject向ObServer通知。 例如微信公众号的关注,关注者就是ObServer,被关注的公众号就是Subject。当关注者关账了一个公众号,那么公众号在推送文章时,就会想所有关注者推送这篇文章;反之,如果关注者取消关注,则公众号在推送文章时不再向他推送文章。类似的场景还有订牛奶等场景。 观察者模式中Subject对象一般包含如下事件: 1、添加事件(当有新的ObServer接入时调用) 2、移除事件(当有ObServer停止接入时调用) 3、通知/发布事件(当有新事件/消息发布时,通过此接口通知所有的ObServer) 而ObServer则提供如下事件/方法: 1、事件/消息接收(用于接收Subject推送的事件/消息) Subject对象和ObServer对象的关系如下: java设计模式详细讲解-观察者模式 2、java 内置观察者

RxJava2使用笔记

余生颓废 提交于 2019-12-13 16:35:38
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Subject Subject可以看成是一个桥梁或者代理,在某些ReactiveX实现中(如RxJava),它同时充当了Observer和Observable的角色。因为它是一个Observer,它可以订阅一个或多个Observable;又因为它是一个Observable,它可以转发它收到(Observe)的数据,也可以发射新的数据 Subject是一个抽象类,不能通过new来实例化Subject,所以Subject有四个实现类,分别为 AsyncSubject BehaviorSubject PublishSubject ReplaySubject AsyncSubject Observer会接收AsyncSubject的`onComplete()之前的最后一个数据,如果因异常而终止,AsyncSubject将不会释放任何数据,但是会向Observer传递一个异常通知 BehaviorSubject Observer会接收到BehaviorSubject被订阅之前的最后一个数据,再接收其他发射过来的数据,如果BehaviorSubject被订阅之前没有发送任何数据,则会发送一个默认数据。 (注意跟AsyncSubject的区别,AsyncSubject要手动调用onCompleted()

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

梦想与她 提交于 2019-12-12 17:08:21
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1.概念 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 2.适用性 (1).当一个抽象模型有两个方面,其中一个方面依赖于另一方面。 将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。 (2).当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变。 (3)..当一个对象必须通知其它对象,而它又不能假定其它对象是谁。 3.参与者 (1).Subject(目标) 目标知道它的观察者。可以有任意多个观察者观察同一个目标。 提供注册和删除观察者对象的接口。 (2).Observer(观察者) 为那些在目标发生改变时需获得通知的对象定义一个更新接口。 (3).ConcreteSubject(具体目标) 将有关状态存入各ConcreteObserver对象。 当它的状态发生改变时,向它的各个观察者发出通知。 (4).ConcreteObserver(具体观察者) 维护一个指向ConcreteSubject对象的引用。 存储有关状态,这些状态应与目标的状态保持一致。 实现Observer的更新接口以使自身状态与目标的状态保持一致 4.示例: package com.accp.Observer; /** * 主题(被观察的东西) *