Android 命令式编程和响应式编程的区别
- 命令式编程是一种基于操作、命令和语句的编程范式,需要指定每个操作的具体步骤和指令顺序,以及如何处理每个判断条件,语句的执行结果会影响后续语句的执行情况
- 响应式编程是一种处理异步数据流和事件驱动的编程范式(面向数据流和变化传播的编程范式),通过异步和数据流来构建事物关系,使得程序能够更直观地表达静态或动态的数据流,并自动将变化的值通过数据流进行传播
命令式编程 Imperative Programming
- 强调步骤和过程,侧重于 “怎么做”,描述达成目标的步骤和操作顺序,需要比较精确地描述过程,包括数据如何被处理、存储和修改
- 指令比较细,比较容易理解,顺序执行,比较容易控制
- 也称为过程式编程
public static void main(String[] args) {
int a = 1;
int b = 2;
int sum = a + b;
System.out.println("sum = "+sum);
a = 3;
b = 4;
System.out.println("sum = "+sum);
//------------ 打印 ---------
sum = 3
sum = 3 //第二次输出还是 3,因为缺少了再次执行相加命令的指令,而在响应式编程中 sum 就可以引申成一个两数相加的规则(定义一种关系),当数据发生变化时,他们应该自动完成相加而不是一定非要加上相加的指令
}
响应式编程 Reactive Programming
-
强调以声明式的方式处理异步数据流,关注于定义数据流及其变换规则,而不是控制执行流程,更侧重于“做什么”(开发者可以定义规则“当数据变化时应该做什么”,而不是传统上去控制程序执行的每一步),目标就是当数据流中的数据发生变化时,依赖这些数据的相关部分能够自动地、及时地做出相应更新
-
响应式编程也可以被视为一种特殊的 Declarative Programming 声明式编程(比如 SQL 语言,Flutter 的声明式 UI)的形式,提前构建好事物与事物之间的关系,我们只需要声明需要做什么,而不需要更多关心具体的实现细节,使得我们能够更好聚焦业务逻辑
-
观察者模式是响应式编程的基础,可以实现对象订阅其他对象的变化以作出反应,适用于处理异步和实时数据更新的场景
-
订阅发布模式是实现响应式编程的基础,通过消息代理解耦生产者和消费者之间的直接依赖
-
事件可以被等待,可以触发过程,也可以触发其它事件
-
通过异步非阻塞的方式提高了效率、有更好的可维护性和扩展性、代码往往能够更加简洁
-
RxJava、LiveData、Flow 等