面向对象设计(OOD)原则

SOLID 七大原则

  • 单一职责原则
  • 开闭原则
  • 里氏代换原则
  • 迪米特法则
  • 接口隔离原则
  • 合成复用原则

开闭原则是总纲,他告诉我们要对扩展开放,对修改关闭;
单一职责原则告诉我们实现类要职责单一;
里氏替换原则告诉我们不要破坏继承体系;
依赖倒置原则告诉我们要面向接口编程;
接口隔离原则告诉我们在设计接口的时候要精简单一;
迪米特法则告诉我们要降低耦合;
合成复用原则告诉我们少继承,多复用

单一职责原则 Single Responsibility Principle, SRP

定义

一个类只负责一项职责。不要存在多于一个导致类变更的原因。

目的
  • 降低变更引起的风险
    类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修改T2时,也不会使职责P1发生故障风险。
  • 降低类的复杂度
  • 提高类的可读性,提高系统的可维护性

开闭原则 Open-Closed Principle, OCP

定义

一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。软件实体应尽量在不修改原有代码的情况下进行扩展。
为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。

目的

提高系统适应性和稳定性。方便地对系统进行扩展,而且在扩展时无须修改现有代码,降低变更引起的风险。

里氏代换原则 Liskov Substitution Principle, LSP

定义

所有引用基类的地方必须能透明地使用其子类的对象。

具体做法

子类可以扩展父类的功能,但不能改变父类原有的功能。
当使用继承时,遵循里氏替换原则。类B继承类A时,除添加新的方法完成新增功能P2外,尽量不要重写父类A的方法,也尽量不要重载父类A的方法。

目的

里氏代换原则是实现开闭原则的重要方式之一。

依赖倒转原则 Dependency Inversion Principle, DIP

定义

高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

做法

面向接口编程

目的

降低类之间的耦合性,提高系统的稳定性,降低修改程序造成的风险。

接口隔离原则 Interface Segregation Principle, ISP

定义

客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

做法

建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

目的

依赖几个专用的接口要比依赖一个综合的接口更灵活。
接口是设计时对外部设定的“契约”,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。

迪米特法则 Law of Demeter, LoD (最少知识原则 LeastKnowledge Principle, LKP))

定义

一个对象应该对其他对象保持最少的了解。

做法

只与直接的朋友通信。出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。

目的

可降低系统的耦合度,使类与类之间保持松散的耦合关系

合成复用原则 Composite Reuse Principle, CRP(组合/聚合复用原则 Composition/Aggregate Reuse Principle, CARP)

定义

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

做法

复用时要尽量使用组合/聚合关系(关联关系),少用继承。

目的

继承复用会破坏系统的封装性,如果基类发生改变,那么子类的实现也不得不发生改变

refer

http://blog.csdn.net/zhengzhb/article/details/7296944

你可能感兴趣的:(面向对象设计(OOD)原则)