设计模式原则
设计模式
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 (中介模式)
- 状态变化
- 数据结构
- Composite (组合模式)
- Iterator (迭代器模式)
- 行为变化
- Command (命令模式)
- Visitor (访问者模式)