天天看点

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

属性 信息
文档名称 响应式编程与设计模式
版本号 V0.0.0.0

文档修改日志

修改时间 修改人 修改描述 版本号
2019-12-28 09:59 宋全恒 响应式编程与设计模式 V0.0.0.0

1 简介

在《Java8设计模式与实践》中第六章和第七章,辛格主要阐述了关于响应式编程与响应式设计模式相关的内容,Reatcive Programming是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便的表达静态或动态的数据流,二相关的计算模型回自动将变化的值通过数据流进行传播。

1.1 实例理解

1.1.1 命令式编程

在命令式编程环境中,

会将表达式的结果赋给a,而之后改变b或c的值不会影响a。但在响应式编程中,a的值会随着b或c的更新而更新。

1.1.2 电子表格

定义流的过程类似于声明Excel的

C1单元格的值等于B1单元格的内容加上A1单元格的内容
           

这样的效果是,无论何时更新A1或者B1单元格的内容,都能观察到C1单元格的更新。

1.2 5W1H

在工作和生活中对于一个陌生的事物,我们可以通过如下的六个侧面来逐渐的熟悉。

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结
  • What - 我真正要解决的问题是什么?
  • Why - 我为什么需要解决这个问题?
  • When - 这个问题何时发生?我需要在什么时间内解决?
  • Where - 这个问题可以从哪里入手?什么场景下使用?哪里可以找到答案?
  • Who - 我可以求助谁?这个问题对谁影响最大?
  • How - 有什么切实可行的解决方案吗?如何解决最高效?

2 响应式编程

2.1 定义

根据响应式宣言,响应式系统具有如下的属性

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

响应式编程是一种依赖于异步数据流的编程范式,它是异步方式下的一种事件驱动型子集,相比之下,响应式系统则是消息驱动的,这表示已经预先知道接收方,而对于事件驱动型来说,接收方可以是任何的观察者。响应式编程不再仅仅是基于事件的编程方式,它更强调数据流而非控制流。

响应式编程中应用了一些来自函数式编程范畴的抽象概念

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

2.2 为什么要使用响应式编程

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

2.3 实践

在Java的世界,响应式编程框架的Java实现版本为RxJava。

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

2.4 Observerable与Observer含义

2.4.1 概念

响应式模式与观察者模式有许多的相似之处,其中观察者模式的类图如下:

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

下图为Observable的流程

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

Observer(观察者)订阅一个Observable,当Observable发送数据时,Observer会通过消费或转换数据来做出响应。在等待Observable发送数据时不需要进行阻塞,,这种模式有助于并发操作。

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

2.4.2 Observable与迭代器的区别

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

响应式编程中的Observable类似于指令迭代器,它解决了相同的问题,但策略不同。Observable通过异步方式推送数据,而迭代器采用同步方式拉取数据。处理错误的方式也不同:Observable使用错误回调函数,而迭代器使用抛出异常。

事件 Iterable Observable
获取数据 T next() onNext(T)
异常 thrown new Exception onError(Exception)
完成后触发 Return onCompleted()

通过使用订阅方法(onNextAction、onErrorAction、onCompletedAction)将Observer与Observable关联起来。

从设计的角度看,响应式编程的Observable通过使用onError回调方法和onCompleted回调方法添加了在发送完成和发送异常时能够发送通知的功能,使观察者模式得到了增强。

2.5 操作符

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

3 响应式设计模式

请求-响应模式时最简单的设计模式

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

请求-响应关系有两方,一个实体发出请求,一个实体完成请求。双方需要就请求和响应的格式达成一致,可以是XML、HTML、JSON、String,只要两个实体都能理解通信,任何格式都是有效的。

响应式编程的四大关键

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

3.1 响应模式

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

虽然请求-响应模式确保所有请求都获得成功响应,但它不会处理某些请求能需要大量时间来响应的情况。即使我们正在执行批量任务,异步通信模式也可以帮助应用程序保持响应。实现响应或快速的方式是使核心任务执行异步。

缓存可以在不同级别实现,例如控制器级别,服务层级别,数据层级别。我们还可以在清代到达代码之前实现缓存,也就是说,在服务器或负载均衡器级别。

3.2 弹性模式

弹性模式的主要含义是:应用程序可以处理故障情况吗?组件故障是否会影响其他应用程序
《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

其中断路器的含义可以通过下述例子中理解:

我们需要一种服务X的机制来理解Y当前是不健康的,并能够正确的处理这种情况。处理这种情况的一种方法是服务X调用服务Y时,如果它在N次重试后观察到服务Y没有响应,则认为服务不健康,并且将其报告报告给监控系统,同时,一段固定的时间(例如10分钟)内它停止调用服务Y

3.3 柔性模式

对可变负载条件作出反应,当负载增加或减少,应用程序不应受到影响,并且应该能够处理任何负载级别而不会影响性能。
柔性一个还未提及的方面是应用程序不应使用不必要的资源
《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

如果我们认为每个请求都是独立的,即在提供所要求的信息、由谁、用户的当前状态方面自给自足,就可以不再担心维护用户的状态了

3.4 消息驱动通信模式

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结

4 总结

刚简单的翻了一下读这两章的时间,发现自己都是在浙江图书馆完成的。并且在P131还摘抄了一首小诗:

穷达皆由命,何劳发叹声;

但知行好事,莫要问前程。

冬去冰须泮,春来草自生。

请君观此理,天道甚分明。

只要认识到自己的自己的愤怒是小题大做,我们就能更加理性地控制自己的情绪。
少年经不得顺境,当我们无所事事的时候,内心的杂念便会悄然滋长。
作家马尔克斯有一句名言:“生命中真正重要的不是你遭遇了什么,二十你记住了那些事,又是如何铭记的。”时常感到幸福的人,往往不是因为他一直被善待,而是他只记得自己被善待。

 最近一直在使用双十二买的平板,然后买了一个机械键盘绽放,是送给妹子的,但妹子不肯接受,又懒得退,就直接用了。最近把onenote的笔记一股脑全部迁移到了印象笔记。晚上下班回家以后,会用键盘连接,学习一会儿,妹子今天出差。

 中午在曾经一起吃过饭的饭馆里吃了些荷包饭,还不错。然后把《中国机长》看完了,整个剧情还是很紧凑的,张涵予饰演的刘长建沉稳干练,电影是根据18年5月14日四川航空3U8633号机组成功处置特情真实事件改编:机组执行航班任务时,在万米高空突遇驾驶挡风玻璃爆裂脱落、座舱释压的极端罕见险情,生死关头,机长和机组人员冷静沉着,稳住生死边缘的乘客,果断应付正确的处置,安全的把119名乘客带回成都的故事。毕竟带着中国的电影名称,在剧中也显示了我国强大的应急预案和风险处置能力,尤其影片中飞机平安降落之后,消防、医务、警务人员紧张去救人的场面让人感动。机长的那一句“敬畏生命、敬畏职责、敬畏规章”的非常感动。

最后把脑图的完整版图片附在下面:

《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结
《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结
《Java设计模式及实践》之响应式编程与设计模式文档修改日志1 简介2 响应式编程2.5 操作符3 响应式设计模式4 总结
2019-12-28 16:51 于马塍路36号