美文网首页
面向对象设计基本原则

面向对象设计基本原则

作者: 不思九八 | 来源:发表于2019-12-26 23:17 被阅读0次

    1、单一职责原则(Single Responce Principle)

    SRP定义:对一个类或接口而言,应仅有一个引起它变化的原因。

    在SRP中,我们把职责定义为“变化的原因”(a reason for change)。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多个职责。本原则基本途径就是提高内聚性,如果一个类承担的职责过多,那么这些职责就相互依赖,一个职责的变化可能会影响另一个职责的履行。其实OOD的实质,就是合理的进行类的职责分配。

    对于何时遵循SRP有以下考虑:

    1. 如果应用程序的变化会影响到类中某一种职责,那么就应该将它与另一种职责分离,这样做可以避免客户应用程序和类中的职责耦合在一起。
    2. 如果应用程序的变化总是会导致两个职责的同时变化,那么就不必分离它们。实际上,分离它们会带来不必要的复杂性。

    从上可得知:变化的轴线仅当变化实际发生时才具有真正的意义。如果没有征兆,那么去应用SRP或其他任何原则都是不明智的。

    2、开放-封闭原则(The Open-Closed Principle)

    OCP:一个软件实体(类、模块、函数等),应该是可扩展的,但是不可修改的。[Software Entities Should Be Open For Extension,Yet Close For Modification]

    该原则认为我们应该试图设计出永远也不需要改变的模块。这是理想状态,但我们应该努力最小化不满足OCP原则的模块数量。

    开放--封闭原则是OOD的真正核心。对扩展开放,模板行为可以被扩展,以满足新的需求;对更改封闭,模块的源代码是不允许改动的。如何做到这两点呢?关键在于抽象;把可能的变化用抽象隔离之。

    符合此原则意味着最高等级的复用性(Reusability)和可维护性(Maintainability)。

    3、里氏替换原则(Liskov Substitution Principle)

    LSP描述:使用指向基类(超类)的引用的函数(方法),必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。[ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ]

    LSP严格的表达是:如果对每个类型为T1的对象O1,都有类型为T2的对象O2,使得T1定义的所有程序P在所有的对象O1替换成O2的时候,程序的行为没有发生变化,那么类型T2是类型T1的子类型。

    LSP是继承复用的基石;它清楚的表示了ISA关系全部都是与行为有关的;所有子类必须符合使用基类的Client所期望的行为;子类型也不得具有比基类更多的限制。

    LSP原则要求父类应尽可能使用接口或抽象类来实现,即面向接口编程。

    4、依赖倒置原则(Dependency Inversion Principle)

    DIP描述:高层模块不依赖于低层模块,两者都依赖抽象;抽象不应依赖于细节,细节应依赖于抽象。

    此原则并非普适于任何上下文,它要求我们把接口(或抽象类)放在使用方(高层),而对被使用方(实现方、低层)透明。

    依赖真的要倒置么取决于上下文,接口归属权看谁是系统的核心。

    5、接口隔离原则(Interface Segregation Principle)

    ISP描述:从一个客户类的角度来讲,一个类对另外一个类的依赖性应当是建立在最小的接口上的。使用多个专门的接口比使用单一的总接口要好。

    一个没有经验的设计师往往想节省接口的数目,将一些功能相关或相近的接口合并,造成接口污染。

    相关文章

      网友评论

          本文标题:面向对象设计基本原则

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