您当前的位置: 首页 > 

龚建波

暂无认证

  • 3浏览

    0关注

    313博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

面向对象设计原则

龚建波 发布时间:2021-02-13 18:20:08 ,浏览量:3

(设计原则简记:SOLID)
  • Single Responsibility Principle:单一职责原则
  • Open Closed Principle:开闭原则
  • Liskov Substitution Principle:里氏替换原则
  • Law of Demeter:迪米特法则
  • Interface Segregation Principle:接口隔离原则
  • Dependence Inversion Principle:依赖倒置原则
单一职责原则(Single Responsibility Principle)

There should never be more than one reason for a class to change.

一个类应当只有一个引起它变化的原因。 If you can think of more than one motive for changing a class, then that class has more than one responsibility.

如果你能想到一个类存在多个使其改变的原因,那么这个类就存在多个职责。

如果一个类拥有多于一个的职责,则这些职责就耦合到在了一起,那么就会有多于一个原因来导致这个类的变化。对于某一职责的更改可能会损害类满足其他耦合职责的能力。这样职责的耦合会导致设计的脆弱,以至于当职责发生更改时产生无法预期的破坏。

单一职责使类的复杂性降低,可维护性提高。

开闭原则(Open-Closed Principle)

Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.

软件实体(类、模块、函数等)应当对扩展开放,对修改封闭。

当一个需求变化导致程序中多个依赖模块都发生了级联的改动,那么这个程序就展现出了我们所说的 "坏设计(bad design)" 的特质。应用程序也相应地变得脆弱、僵化、无法预期和无法重用。开放封闭原则(Open Closed Principle)即为解决这些问题而产生,它强调的是你设计的模块应该从不改变。当需求变化时,你可以通过添加新的代码来扩展这个模块的行为,而不去更改那些已经存在的可以工作的代码。

开闭原则是构建可维护性和可重用性代码的基础。它强调设计良好的代码可以不通过修改而扩展,新的功能通过添加新的代码来实现,而不需要更改已有的可工作的代码。抽象(Abstraction)和多态(Polymorphism)是实现这一原则的主要机制,而继承(Inheritance)则是实现抽象和多态的主要方法。

里氏替换原则(Liskov Substitution Principle)

Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.

在使用基类对象的地方也必须能用子类替换,但无需了解子类实现。(子类只是进行扩展,而不破坏基类已有实现)

If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T.

如果对于S类型的每个对象o1有一个T类型的对象o2,那么对于用T定义的所有程序P,当o1替换o2时P的行为是不变的,那么S是T的一个子类型。

里氏替换原则可以加强程序的健壮性,升级时的兼容性。

迪米特法则(Low Of Demeter)

也叫: 最少知识原则(Least Knowledge Principle)

Each unit should have only limited knowledge about other units: only units "closely" related to the current unit.

每个单元对其他单元只拥有有限的了解,只了解与当前单元紧密联系的单元。

Only talk to your immediate friends.

只和自己最紧密的朋友交流。

迪米特法则可以降低模块间的耦合,提升软件的可维护性和可重用性。

接口隔离原则(Interface Segregation Principle)

Clients should not be forced to depend upon interfaces that they don't use. 

客户不应该依赖它不需用的接口。

The dependency of one class to another one should depend on the smallest possible interface.

类间的依赖关系应该建立在最小的接口上。

接口隔离原则用于处理胖接口(fat interface)所带来的问题。如果类的接口定义暴露了过多的行为,则说明这个类的接口定义内聚程度不够好。换句话说,类的接口可以被分解为多组功能函数的组合,每一组都服务于不同的客户类,而不同的客户类可以选择使用不同的功能分组。

依赖倒置原则(Dependence Inversion Principle)

High level modules should not depend upon low level modules. Both should depend upon abstractions.

高层模块不应该依赖于低层模块,二者都应该依赖于抽象。(高层相较于低层更稳定)

Abstractions should not depend upon details. Details should depend upon abstraction.

抽象不应该依赖于具体实现细节,而具体实现细节应该依赖于抽象。(抽象相较于实现细节更稳定)

依赖倒置原则是很多面向对象技术的根基。它特别适合应用于构建可复用的软件框架,其对于构建弹性地易于变化的代码也特别重要。并且,因为抽象和细节已经彼此隔离,代码也变得更易维护。

其他

除了六种经典的设计原则外,还有些常提到的:

针对接口编程,而不是针对实现编程。

优先使用对象组合,而不是类继承。

关注
打赏
1655829268
查看更多评论
立即登录/注册

微信扫码登录

0.0620s