美文网首页
面向对象设计(OOD)原则

面向对象设计(OOD)原则

作者: 绿皮黄瓜 | 来源:发表于2018-02-23 14:48 被阅读0次

    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)原则

          本文链接:https://www.haomeiwen.com/subject/pnlxxftx.html