Hurricance

Less is more


设计模式 - 01

设计原则(面向对象)

设计模式的本质是解决某一类问题可使用的模板, 包括:

  • 创建型(Creational)模式:如何创建对象;
  • 结构型(Structural)模式:如何实现类或对象的组合;
  • 行为型(Behavioral)模式:类或对象怎样交互以及怎样分配职责。

设计原则(本质上是为了提高代码可复用性, 可维护性, 低耦合高内聚)

  • 单一职责原则 (Single Responsibility Principle, SRP)

    • 类的功能要单一, 如果类内部有多个功能, 修改其中一个功能的代码可能会影响到内部公共模块, 所以引起类内部代码的修改原因只能有一个
  • 开闭原则 (Open-Closed Principle, OCP)

    • 开闭原则是总纲, 在设计的时候就要有前瞻性, 避免修改类内部的代码, 派生实现类来拓展功能
  • 里氏替换原则 (Liskov Substitution Principle, LSP)

    • 任何基类可以出现的地方,子类一定可以出现, 尽量不要重写父类的方法, 实现开闭原则的关键步骤就是抽象化, 而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
  • 接口隔离原则 (Interface Segregation Principle, ISP)

    • 建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少(有点“接口单一职责”的意思)
  • 依赖倒置原则 (Dependence Inversion Principle, DIP)

    • 面向接口编程, 依赖于接口而不是具体的类, 减少类之间的耦合
  • 合成复用原则 (Composite Reuse Principle, CRP)

    • 继承会增加类之间的耦合度, 而且父类的所有字段和方法会被继承, 同时继承也是静态的, 不能在运行时发生改变
    • 组合可以选取自己所需的东西, 是黑箱复用, 而且组合的对象能在运行时改变, 具有一定的灵活性
    • 满足 “Is-A” 的关系是才可以使用继承,而组合却是一种 “Has-A”(整体与部分)的关系
  • 迪米特法则 (Law of Demeter, LoD)

    • 降低对类的依赖(数量和深度), 使用中介类来进行通信
    • 最少知道原则, 对于所依赖的类的内部处理细节知道的越少越好, 要求被依赖的类提供现成的方法

参考资料