软件开发原则

  • 单一职责原则(SRP)
  • 开闭原则(OCP)
  • 里氏替换原则(LSP)
  • 依赖倒置原则(DIP)
  • 接口隔离原则(ISP)
  • 迪米特法则(最少知道原则)
  • 合成/聚合复用原则(CARP)

设计模式分类

  • 根据作用范围:类/对象模式
  • 根据目的分类:创建型/结构型/行为型模式

创建型模式:如何创建对象

  • 单例模式(懒汉式、饿汉式、双检锁、线程唯一单例)
  • 工厂方法模式(类)
  • 抽象工厂模式
  • 建造者模式
  • 原型模式

结构型模式:如何将类或对象结合在一起形成一个更强大的结构

  • 适配器模式(类/对象)
  • 组合模式
  • 装饰器模式
  • 代理模式
  • 享元模式
  • 外观模式
  • 桥接模式

行为型模式:类或对象间如何交互、如何划分职责,从而更好地完成任务

  • 迭代器模式
  • 模板方法模式(类)
  • 策略模式
  • 命令模式
  • 状态模式
  • 责任链模式
  • 备忘录模式
  • 观察者模式
  • 访问者模式
  • 中介者模式
  • 解释器模式(类)

设计模式总体概括

此图表来自schips

顺序设计模式常用程度适用层次引入时机复杂度变化实现体现的原则
1Factory Method很常用代码级编码时简单子类的实例化对象的创建工作延迟到子类开闭原则
2Singleton很常用代码级、应用级设计时、编码时简单唯一实例封装对象产生的个数
3Facade很常用应用级、构架级设计时、编码时简单子系统的高层接口封装子系统开闭原则
4Template Method很常用代码级编码时、重构时简单算法子步骤的变化封装算法结构依赖倒置原则
5Abstract Factory较常用应用级设计时较复杂产品家族的扩展封装产品族系列内容的创建开闭原则
6Composite较常用代码级编码时、重构时较复杂复杂对象接口的统一统一复杂对象的接口里氏代换原则
7Proxy较常用应用级、构架级设计时、编码时简单对象访问的变化封装对象的访问过程里氏代换原则
8Command较常用应用级设计时、编码时较简单请求的变化封装行为对对象开闭原则
9Observer较常用应用级、构架级设计时、编码时较简单通讯对象的变化封装对象通知开闭原则
10Strategy较常用应用级设计时一般算法的变化封装算法里氏代换原则
11Builder一般代码级编码时一般对象组建的变化封装对象的组建过程开闭原则
12Adapter一般代码级重构时一般对象接口的变化接口的转换
13Bridge一般代码级设计时、编码时一般对象的多维度变化分离接口以及实现开闭原则
14Decorator一般代码级重构时较复杂对象的组合职责在稳定接口上扩展开闭原则
15Iterator一般代码级、应用级编码时、重构时较简单对象内部集合的变化封装对象内部集合的使用单一职责原则
16Mediator一般应用级、构架级编码时、重构时一般对象交互的变化封装对象间的交互开闭原则
17Memento一般代码级编码时较简单状态的辅助保存封装对象状态的变化接口隔离原则
18State一般应用级设计时、编码时一般对象状态的变化封装与状态相关的行为单一职责原则
19Visitor一般应用级设计时较复杂对象操作变化封装对象操作变化开闭原则
20Prototype不太常用应用级编码时、重构时较简单实例化的类封装对原型的拷贝依赖倒置原则
21Flyweight不太常用代码级、应用级设计时一般系统开销的优化封装对象的获取
22Chain of Resp.不太常用应用级、构架级设计时、编码时较复杂对象的请求过程封装对象的责任范围
23Interpreter不太常用应用级设计时较复杂领域问题的变化封装特定领域的变化

命令模式

将一个请求分装成一个对象,从而可以使用不同的请求对客户进行参数化

单例模式

保证一个类只有一个实例,并且能够提供一个访问它的全局访问点。

模板方法模式

定义一个操作中的算法骨架,将一些步骤延迟到子类里面。