面向对象的设计原则

来源:互联网 发布:广电好还是网络电视好 编辑:程序博客网 时间:2024/06/14 22:56

单一职责原则——Single Responsibility Principle,SRP

定义:就一个类而言,应该只有一个引起它变化的原因。


里氏替换原则——Liskov Substitution Principle,LSP

定义:所有引用基类(父类)的地方必须能透明地使用其子类的对象。

注意:反过来不行,即子类出现的地方父类对象未必能出现。


依赖倒置原则——Dependency Inversion Principle,DIP

定义:抽象不应该依赖于细节,细节应当依赖于抽象。

具体实现之间不直接产生依赖关系,而是通过抽象(抽象类或接口)产生,即面向接口编程。而一个通过抽象注入其所依赖的对象就是依赖注入

实现依赖注入的3种方式:

  1. 构造注入
  2. 设值注入(Setter注入)
  3. 接口注入(接口方法中的参数对象注入)

开闭原则——Open-Closed Principle,OCP

定义:一个软件实体如类、模块和函数应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

注意:开闭原则并不意味着绝对不修改源代码,因为模块与模块之间肯定存在耦合(只是耦合程度的高低有所不同),因此必要的源码修改是正常的。

如何做到开闭原则?
定义系统的抽象层,再通过具体类来进行扩展。即如果需要修改系统的行为,无需对抽象层进行任何修改,只需要增加具体类实现新的业务功能即可,从而实现在不修改已有代码的基础上扩展系统的功能,实现拥抱变化。


接口隔离原则——Interface Segregation Principle,ISP

定义:客户端不应该依赖那些它不需要的接口,即使用多个专门的接口,而不是使用单一的总接口。


合成复用原则——Composite Reuse Principle,CRP

定义:尽量使用对象组合,而不是继承来达到复用的目的。

注意:

  • 虽然继承可以重用代码,但继承也有缺点,因为继承是侵入式的。继承使得基类的实现细节暴露给了子类,对基类的修改会影响到子类。
  • 合成复用是将一个对象作为另一个对象的一部分,被包含对象发生的变化对其所在的对象的影响不大。
  • 合成复用是has-a的关系,而合成复用是is-a的关系。

迪米特法则——Law of Demeter,LoD 又称:最少知识原则——Least Knowledge Principle,LKP

定义:一个对象应该对其他对象有最少的了解。即一个类应该对需要耦合或调用的类知道得最少。


原创粉丝点击