Android 命令式编程和响应式编程的区别

124 阅读3分钟

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 等