OOP 设计模式的六大原则

OOP 设计模式的六大原则


设计模式的类别

分为 结构型模式创建型模式行为型模式
顾名思义即可(比如说创建型模式意思就是说应该按什么样的方式创建……)。
OOP 设计模式的六大原则_第1张图片


设计模式的六大原则

  1. 开闭原则(Open Close Principle)

    1)对扩展开放,对修改关闭
    2)open:模块的行为必须是开放的、支持扩展的,而不是僵化的。
    3)close:在对模块的功能进行扩展时,不应该影响或大规模影响已有的程序模块

  2. 里氏代换原则(Liskov Substitution Principle)

    1)这个原则是指:任何基类出现的地方,将它替换为子类,不会改变程序的正确性
    2)反过来不一定成立:子类出现的地方,不一定可以将其替换为父类。
    3)对于 OOP 来说,开闭原则说明了为什么要使用 “接口和抽象类”,里氏代换原则说明了为什么要使用 “继承”。

  3. 依赖倒转原则(Dependence Inversion Principle)
    这一部分参考:这篇文章

    1)这个原则是指:针对接口编程,依赖于抽象而不依赖于具体。如下图,右侧的就比左侧的好,因为左侧的过于依赖于细节,不易扩展和修改。
    OOP 设计模式的六大原则_第2张图片 OOP 设计模式的六大原则_第3张图片
    2)在实现的时候:

    每个类尽量都要有接口或抽象类。
    变量的表面类型尽量是接口或者抽象类类型。
    任何类都不应该从具体类派生。
    尽量不要重写基类已经写好的方法(否则会违背里式替换原则)

  4. 接口隔离原则(Interface Segregation Principle)

    1)这个原则就是说:使用多个隔离的接口,比使用单个接口要好。其实就是让我们 尽可能地细化接口,把每个完成某特定功能的方法都放在一个专门的接口里,而不是写成一个包含很多功能的胖接口

    2)该原则的两个目的:
    一是降低互相关联的类之间的耦合性。
    二是不让用户接触到它不需要的接口。

  5. 迪米特法则,又称最少知道原则(Demeter Principle)

    最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立

  6. 合成复用原则(Composite Reuse Principle)

    1)合成 & 聚合:
    类比于 C++,合成是 “值的聚合”,聚合是 “引用的聚合”。
    由类 B、C 合成类 A: B、C 和 A 具有相同的生命周期,A 没了,B、C 也就没了;另外,B、C 只能是 A 的成分,不能同时是 D 的成分。
    由类 B、C 聚合类 A:A 的存在与否与 B、C 没有什么关系,A 没了, B、C 还在。B、C 还可以同时被 D 聚合。

    2)依赖 & 关联:
    类 A 依赖类 B:A 需要知道 B 的实现方式(定义),是一种使用与被使用的关系,单向的。
    类 A 关联类 B:A 需要知道 B 有什么内容(声明),可以是双向的(类 B 可以同时关联类 A)。

    3)合成复用原则是指:当一个类想要复用另一个类中的方法时,尽量使用合成/聚合的方式来复用,而不是使用继承关系来复用

    4)为什么:参考 这篇文章
    OOP 设计模式的六大原则_第4张图片OOP 设计模式的六大原则_第5张图片
    左图是错误的设计方式,右图是正确的。

    合成复用原则经常与里氏代换原则共用。它们的目的就是让我们 在想要使用继承关系的时候再仔细慎重地思考一下两个类之间是否真的是继承关系。例如左图。

    “Is-A” 是严格的分类学意义上的定义,意思是一个类是另一个类的 “一种” 。而 “Has-A” 表示某一个角色具有某一项责任,”Is A“ 才能使用继承。

你可能感兴趣的:(设计模式)