Skip to content

Commit 4087446

Browse files
update
1 parent f25b69e commit 4087446

9 files changed

Lines changed: 18 additions & 7 deletions

File tree

112 KB
Binary file not shown.

代码质量/面向对象与设计原则.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
[toc]
22

3-
# 重新认识面向对象
3+
# 1. 重新认识面向对象
44

55

66

7-
面向对象是一种编程范式或者编程风格。之前勇哥就说过,他经常用 C 编写面向对象的程序。它以类或对象作为组织代码的基本单元,并将封装、抽象、集成、多态四个特性作为代码的基石。
7+
面向对象是一种编程范式或者编程风格。之前一个大佬同事就说过,他经常用 C 编写面向对象的程序。它以类或对象作为组织代码的基本单元,并将封装、抽象、集成、多态四个特性作为代码的基石。
88

9-
**面向对象的四大特性**:封装、集成、多态、抽象。
9+
**面向对象的四大特性**:封装、继承、多态、抽象。
1010

1111

1212

@@ -51,7 +51,7 @@
5151

5252
## 抽象
5353

54-
封装讲的是如何隐藏数据、保护数据,而抽象讲的是==如何隐藏具体实现提取特征==。调用者只要关心方法提供了那些功能,并不需要知道这些功能是如何实现的。
54+
==封装讲的是如何隐藏数据、保护数据,而抽象讲的是如何隐藏具体实现提取特征==。调用者只要关心方法提供了那些功能,并不需要知道这些功能是如何实现的。
5555

5656
抽象以及封装都是人类处理复杂问题才有的手段,在复杂问题面前,人脑能承受的信息复杂度是有限的,所以我们必须忽略掉一些非关键的实现细节,关注整体特征。
5757

@@ -85,7 +85,7 @@
8585

8686
## 基于接口编程
8787

88-
接口是抽象的一种具体变现,可以看做是一份协议,指导工作双方或者多方的行为准则,让使用者不用关心具体的实现。所以基于接口编程更好的表示应该为:基于抽象编程。
88+
接口是抽象的一种具体变现,可以看做是一份协议,指导工作双方或者多方的行为准则,让使用者不用关心具体的实现。==所以基于接口编程更好的表示应该为:基于抽象编程。==
8989

9090
在软件开发中我们要做的就是抵御变化。而基于接口编程是一种非常好用的手段。我们将多变的具体实现抽象为稳定的接口,让上层建筑不依赖变化的具体实现,转而使用稳定的接口,当具体实现发生变化的时候,上层建筑根本就不用感知与变化(解耦),这恰恰体现了“对修改关闭,对拓展开放”的精髓:抵御变化、提高拓展性,最终实现系统的弹性。
9191

813 KB
Binary file not shown.
47.2 KB
Loading
215 KB
Loading

杂项/关于 WsTools 的使用.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
关于 WsTools 的使用
2+
3+
1。 然后在 Charles 里面设置 map remote ,设置为本地 ip 和端口号
4+
5+
6+
7+
<img src="images/image-20230202193828158.png" alt="image-20230202193828158" style="zoom: 50%;" />
8+
9+
2. 打开 WsTools 设置功能,填写需要 mock 的地址,随意填写,然后填写和上面一直的本地端口号。
10+
11+
![image-20230202193747101](images/image-20230202193747101.png)

源码分析/RxJava/0、前世今生.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ getA(new Callback() {
6363

6464

6565

66-
从中可见 Observable 是一组异步数据的集合,和 Collection 一样他可以包含 0 至 n 个数据,当我们在处理Collection出现异常时(比如NullPointerException),我们的程序会崩溃,不会有接下来的处理。所以我们的Observable在收到onError之后,也不会再有数据推送给我们。
66+
==从中可见 Observable 是一组异步数据的集合,和 Collection 一样他可以包含 0 至 n 个数据,当我们在处理Collection出现异常时(比如NullPointerException),我们的程序会崩溃,不会有接下来的处理。所以我们的Observable在收到onError之后,也不会再有数据推送给我们。==
6767

6868

6969

源码分析/RxJava/RxJava 线程切换原理.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,6 @@ public final class ObservableSubscribeOn<T>
291291

292292
看到这里,你可能也注意到了:从之前 Scheduler 的源码我们可知,默认情况下调用 `scheduleDirect()` 也是将 Task 交给 `createWorker()` 新建的 Worker 实例执行的;那为什么 observeOn 要采取和 subscribeOn 不同的实现方式呢?感兴趣的同学可以去看看 [single](http://reactivex.io/RxJava/javadoc/io/reactivex/schedulers/Schedulers.html#single--) 调度器的源码,分开两个方法可以更充分的自定义,且这两个方法也不一定是直接相关的。只要保证底层的调度逻辑是正确的就 OK 了。
293293

294-
总的来说,subscribeOn 和 observeOn 都是将逻辑封装到 Runnable 中交给对应的 Scheduler 执行,从而实现了线程切换。但受限于篇幅原因,其中仍然有非常多的细节被本文略去了,建议感兴趣的读者可自行查阅源码。
294+
##### 总的来说,subscribeOn 和 observeOn 都是将逻辑封装到 Runnable 中交给对应的 Scheduler 执行,从而实现了线程切换。但受限于篇幅原因,其中仍然有非常多的细节被本文略去了,建议感兴趣的读者可自行查阅源码。
295295

296296
最后,即使在 2020 年的今天,同为 JVM 系语言的 [Kotlin](https://kotlinlang.org/) 已经支持协程的情况下,RxJava 仅仅使用 JDK 提供的多线程 API 就能将线程切换处理的如此优雅,仍然是十分值得学习和使用的库。笔者认为它并没有过时。
-9.73 KB
Binary file not shown.

0 commit comments

Comments
 (0)