编程思想之六大原则
六大基本原则
如果要求一口气说出六大基本原则,估计只有少部分人能流利地回答出来,但如果是提到具体的某项原则,相信大多数人光听到名字就能知道其中的内容。
单一职责原则
一句话概述:一个类或接口只做一件事
优点:
- 降低复杂度
- 提高可读性
- 提高可维护性
接口的设计尽量做到单一职责,类的设计尽量做到一个原因引起变化
个人见解
很多时候只能是尽量做到而不是完全做到。不过思想是可以借鉴的,比如现在如日中天的 Spring Cloud,一个模块相当于也只是做自己的事,另外还可以从 JDK 源码看出,所以单一职责原则大到模块、系统,小到具体的类、方法都是有用武之地的。里氏替换
一句话概述:只要父类能出现的地方子类就可以出现
优点:
- 提高重用性
- 提高可扩展性
尽量避免子类的“个性”
个人见解
里氏替换实际上是指导继承的使用,使用继承父类最好是一个抽象类而非具体类,子类的个性是通过抽象方法的实现,而不是去扩展新的方法。要是非要扩展父类没有的方法,就需要考虑两类使用依赖、聚集、组合等关系来替代继承。依赖倒置
一句话概述:面向接口编程
优点:
- 降低耦合性
- 提高可扩展性
- 提高可维护性
每个类尽量都有接口或抽象类,或者抽象类和接口两者都具备
个人见解
依赖倒置一般结合里氏替换来运用,接口定义公共方法和属性,抽象类负责实现公共特性,剩下的由具体类来实现。实际在项目中运用最多就是 IxxService 命名的接口。此外,项目开发很多时候都是并行的(除非一个人负责项目),所以可以经常听到同事说能不能先给(定义)一个接口,却没有听到谁说给一个类,侧面说明依赖倒置的普遍性。接口隔离
一句话概述:接口尽量细化
优点:
- 降低耦合性
- 提高可扩展性
- 提高可维护性
接口内容尽量细化和分散,一个接口只服务于一个子模块或业务逻辑
个人见解
这是一项专门针对接口的原则,看上去和单一职责有点像,不过接口隔离是对单一职责的内容更,不必刻意去深究。迪米特法则
一句话概述:一个类应该对自己需要耦合或调用的类知道得最少
优点:
- 降低耦合性
- 提高重用性
一个类尽量收敛,不要对外开放太多的 public 方法和非静态的 public 变量
个人见解
这个原则是最难理解的,什么叫调用的类知道最少,什么叫不要开放太多 public 属性和方法。第一点,调用类知道最少,简单的来说就是A想叫B得到C的结果,既然能通过B得到C的结果,那么A就不需要去和C产生关联;第二点,举一个实际例子,比如把大象装进冰箱。首先肯定需要找到冰箱,然后打开门,接着把大象赛进去,最后关上门。如果把每个步骤封装成一个方法,对于用户来说,只需要得到把大象装进冰箱这个结果,如果在设计时候暴露找冰箱等步骤,很有可能被别人偷梁换柱。所以,迪米特法则也保证了类的高内聚特性。开闭原则
一句话概述:对修改关闭,对扩展开放
优点:
- 提高重用性
- 提高可维护性
开闭原则是目的,其他五大原则是手段
个人见解
开闭原则更适合称作为一种思想,其具体实现是通过其他五大原则。总结
六大基本原则不需要过于刨根追底,本质上也不存在什么标准答案。就算一个系统设计得再符合六大原则的标准,也不见得比完全不符合的性能高多少。说得功利一点,面试被拒也轮不到六大原则来背锅。不过个人觉得六大基本原则和二十三种设计模式至少还是学习两遍,第一遍是刚学习编程的时候,还有一遍就是有一定实际开发经验,肯定会对自己不管是源码的理解还是新技术体系的接触有所帮助。

浙公网安备 33010602011771号