设计模式原则

设计模式原则

设计模式

1.什么是设计模式?

  • 每一个设计模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.这样就能一次又一次地使用该方案而不必做重复的劳动.
  • 底层思维: 向下,如何把握机器底层从微观理解对象构造
    • 语言构造
    • 编译转换
    • 内存模型
    • 运行时机制
  • 抽象思维: 向上,如何将我们的周围世界抽象为程序世界.
    • 面向对象
    • 组件封装
    • 设计模式
    • 架构模式

      2.如何解决复杂性?

  • 分解:面对复杂的问题有一个常见的做法:分而治之,将大问题分解为若干个小问题,将复杂问题分解为多个简单问题
  • 抽象:由于不能掌握全部的复杂对象,可以使用抽象去忽视非本质的细节,而去处理泛化和理想了的对象模型.

    面向对象设计原则

    依赖倒置原则(DIP)

  • 高层模块 (稳定) 不应该依赖于低层模块 (变化),二者都应该依赖于抽象 (稳定) .
  • 抽象 (稳定) 不应该依赖与实现细节 (变化),实现细节应该依赖于抽象 (稳定).

    开放封闭原则(OCP)

  • 对扩展开放,对修改封闭.
  • 类模块应该是可扩展的,但是不可修改.

    单一职责原则(USP)

  • 一个类应该仅有一个引起它变化的原因
  • 变化的方向隐含着类的责任

    里式替换原则(LSP)

  • 子类必须能够替换它们的基类(IS-A)
  • 继承表达类型抽象

    接口隔离原则(ISP)

  • 不应该强迫客户程序依赖他们不用的方法
  • 接口应该小而完备

    优先使用对象组合,而不是继承

  • 类继承通常为”白箱复用”,对象组合通常为”黑箱复用”
  • 继承在某种程度上破坏了封装性,子类父类耦合度高,而对象的组合则只要求被组合的对象具有良好定义的接口,耦合度低.

    设计模式分类

  • GOF中的分类方式:
    • 创建型模式(Creational): 将对象的部分创建工作延迟到子类或者其他对象,从而应对需求变化为对象创建时具体类型实现引来的冲击.
    • 结构型模式(Structural): 用过类继承或者对象组合获得更灵活的结构,从而应对需求变化为对象的结构带来的冲击.
    • 行为型模式(Behavioral): 通过类继承或者对象组合来划分类与对象间的职责,从而对需求变化为多个交互的对象带来的冲击.
  • 从封装变化角度对模式分类
    • 组件协作
      • Template Method (模板方法)
      • Strategy (策略模式)
      • Observer / Event (观察者模式)
    • 单一职责
      • Decorator (装饰模式)
      • Bridge (桥接模式)
    • 对象创建
      • Factory Method (工厂方法)
      • Abstract Foctory (抽象工厂)
      • Protoype (原型模式)
      • Builder (建造者模式)
    • 对象性能
      • Singleton (单例模式)
      • Flyweight (享元模式)
    • 接口隔离
      • Facade (外观模式)
      • Proxy (代理模式)
      • Adapter (适配器模式)
      • Mediator (中介模式)
    • 状态变化
      • State (状态模式)
    • 数据结构
      • Composite (组合模式)
      • Iterator (迭代器模式)
    • 行为变化
      • Command (命令模式)
      • Visitor (访问者模式)