Hulk Su

Results 32 comments of Hulk Su

![1924341-f6dd9d24b4016056](https://user-images.githubusercontent.com/31280310/137828485-7c93212c-e6fc-4336-90a8-2992123b02a6.png) 可参考一文:https://www.cnblogs.com/dasusu/p/9264907.html

- **单一职责原则**(*Single Responsibility Principle*): 对于一个类来说,它里面包含的应该是相关性很高的函数或者变量。比如,两个不相关的业务功能不应该放在一个类中处理,我们应该尽可能的针对于**具体的业务功能**对类进行拆分,以达到“每个类只负责自己需要关心的内容,其他的与我无关”的目的。 - **开闭原则**(*Open Close Principle*): 开闭原则是我们程序设计过程中最基本的原则之一。在我们的程序里,我们所熟知的**对象**,对于扩展应该是开放的,而对于修改应该是封闭的。什么意思呢?其实很好理解。我们平常在开发的时候可能会经常碰到一个问题:今天写了一个类,里面封装了很多功能方法,但是过了没多久,业务功能改动了,我们又不得不修改这个类里面已存在的代码,以满足当前业务需求。然而,修改已存在的代码会带来很大问题,倘若这个类在很多其他类中用到,而且耦合度较高,那么即使我们对该类内部代码做很小的改动,可能都会导致与之相关(引用到该类)的部分的**改动**,如果我们不注意这个问题,可能就会一直陷入无止境修改和烦躁当中,这就**违背了开闭原则**。推荐的做法是:为了防止与之相关类(引用到该类)的改动,我们对于该类的修改应该是封闭的,我们可以提供对于该类功能的扩展途径。那么该如何扩展呢?可以通过**接口**或者**抽象类**来实现,我们只需要暴露公共的方法(接口方法),然后由具体业务决定的类来实现这方法,并在里面处理具体的功能代码,至于对外具体怎么用,用户无需关心。其实,开闭原则旨在指导用户,当我们业务功能需要变化时,应该尽量通过**扩展**的方式来实现,而不是通过**修改**已有代码来达到目的。只有这样,我们才能避免代码的冗余和腐化,才能使系统更加的稳定和灵活。 - **里氏替换原则**(*Liskov Substitution Principle*): 对于一个系统来说,所有引用**基类**的地方必须同样能够透明地替换为其子类的对象。看下面这张图应该就能理解什么意思了: ![806F01E4-BEA6-457A-9805-A97B82205FFE](https://user-images.githubusercontent.com/31280310/56195546-c84e8d80-6067-11e9-969a-0a812fd96430.png) 这里简单模拟了一下 Android 系统中的 Window 与 View 的关系,Window显示视图的时候只需要传一个 **`View`** 对象,但在具体的绘制过程中,传过来的可以是 View 的子类 `TextView` 或者是 `ImageView`...