// 观众的行为(观察者-订阅者接口)@FunctionalInterfaceinterface Viewer {public void watch();}// 具体订阅者class ConcreteViewer implements Viewer {@Overridepublic void watch() {System.out.println("正在看表演");}}// 演员(发布者)class Actor {// 观众(订阅者)列表private List<Viewer> viewers = new ArrayList<Viewer>();// 买票(订阅)public void buyticket(Viewer viewer) {viewers.add(viewer);}// 退票(取消订阅)public void refund(Viewer viewer) {viewers.remove(viewer);}// 开始表演public void play() {for (Viewer viewer : viewers) {viewer.watch();}}}/** * 剧院 * * @author 湘王 */public class Theater {public static void main(String[] args) {ConcreteViewer viewer1 = new ConcreteViewer();ConcreteViewer viewer2 = new ConcreteViewer();Actor actor = new Actor();actor.buyticket(viewer1);actor.buyticket(viewer2);actor.buyticket(() -> System.out.println("正在VIP包厢看表演"));actor.play();}}这也是反应式编程的门槛比较高的原因 , 对于一些没有学过设计模式的同学来说,反应式编程确实很不好理解 。这也没办法,因为整个反应式编程的根基就是建立在观察者模式之上的,而且还结合Java9里面的Flow API做了一些改变 , 有兴趣的同学可以自己去了解一下 , 所以总结来说的话,反应式编程的特点就是这样的:

文章插图
用一句简单的话来概括反应式编程 = 函数式编程 + 流式计算 + 观察者模式 。
感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言 。欢迎骚扰,不胜荣幸~
【1 Java反应式编程】
推荐阅读
- 四十一 增删查改分页 Java开发学习----MyBatisPlus标准数据层开发
- Java安全之Mojarra JSF反序列化
- 中 学习ASP.NET Core Blazor编程系列十——路由
- Java 【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK 输出日志并以文件形式保存
- Java安全之CC3
- Java8中那些方便又实用的Map函数
- 【JAVA】详解在JAVA中int与Integer的区别以及背后的原因。
- JavaScript for循环的终止问题
- windows socket网络编程--事件选择模型
- Java安全之动态加载字节码