面向对象设计基本原则

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描述:从一个 客户类的角度来讲,一个类对另外一个类的 依赖性应当是建立在 最小的接口上的。使用多个专门的接口比使用单一的总接口要好。
   一个没有经验的设计师往往想节省接口的数目,将一些功能相关或相近的 接口合并,造成 接口污染


 

 

你可能感兴趣的:(面向对象)