面向对象的五大基本原理

1.单一职责原则(SRP)

  • 类的功能要单一,不能包罗万象,跟杂货铺似的。

  • 核心思想为:一个类,最好只做一件事,只有一个引起它的变化。

2.开放封闭原则(OCP)

  • 对象或实体应该对扩展开放,对修改封闭。

  • 更改封闭即是在我们对模块进行扩展时,勿需对源有程序代码和DLL进行修改或重新编译文件!这个原则对我们在设计类的时候很有助,

  • 坚持这个原则就必须尽量考虑接口封装,抽象机制和多态技术!

  • 核心思想是:软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭。

  • 总结:“需求总是变化”没有不变的软件,所以就需要用封闭开放原则来封闭变化满足需求,同时还能保持软件内部的封装体系稳定,不被

  • 需求的变化影响。

3.里氏替换原则(LSP)

  • 在对象 x 为类型 T 时 q(x) 成立,那么当 S 是 T 的子类时,对象 y 为类型 S 时 q(y) 也应成立。(即对父类的调用同样适用于子类)

  • 核心思想是:子类对象能够替换父类对象,而程序逻辑不变。

  • 总结:里氏替换原则能够保证系统具有良好的拓展性,同时实现基于多态的抽象机制,能够减少代码冗余,避免运行期的类型判别

4.依赖倒置原则(DIP)

  • 高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。具体实现应该依赖于抽象,而不是抽象依赖于实现。

  • 我们不应该让子类依赖于实体,不应该让父类模块依赖于子类模块。所以我们需要将食草动物设计为抽象类,即抽象类或接口。这样下层只需要实现相应的细节而不会影响父类。

  • 其核心思想是:依赖于抽象。

  • 将耦合紧密的两个模块进行分离接口和实现,主要依赖于接口编程。

  • 总结:依赖于抽象,就是对接口编程,不要对实现编程。

5.接口隔离原则(ISP)

  • 不应强迫客户端实现一个它用不上的接口,或是说客户端不应该被迫依赖它们不使用的方法,使用多个专门的接口比使用单个接口要好的多!

  • 核心思想是:使用多个小的专门的接口,而不要使用一个大的总接口。

  • 使用臃肿的接口,会造成实现类实现接口的所有方法,不管是它需要的还是不需要的,造成接口污染。

  • 接口污染是指把接口做的过于“胖”,派生类必须实现某些它用不到的功能,这样不仅加大了接口间的耦合,而且带来不必要的复杂性,造成接口污染。

  • 总结:遵守接口隔离原则,将“胖”接口拆分为独立的几个接口,各实现类分别与需要的接口类来建立依赖关系。