设计模式是什么?
在软件工程中,设计模式(Design Pattern)是对软件设计中常见问题的典型解决方案。它们就像能根据需求进行调整的预制蓝图,可用于解决代码中反复出现的设计问题。
设计模式与方法或库的使用方式不同,你很难直接在自己的程序中套用某个设计模式。模式并不是一段特定的代码,而是解决特定问题的一般性概念。你可以根据模式来实现符合自己程序实际所需的解决方案。
人们常常会混淆模式和算法,因为两者在概念上都是已知特定问题的典型解决方案。但算法总是明确定义达成特定目标所需的一系列步骤,而模式则是对解决方案的更高层次描述,同一模式在两个不同程序中的实现代码可能会不一样。
算法更像是菜谱,提供达成目标的步骤。而模式更像是蓝图,你可以看到最终的结果和模式的功能,但需要自己确定实现步骤。
设计模式的七大原则
- 单一职责原则(SRP):一个接口或类只有一个原因引起变化
- 里氏替换原则(LSP):所有引用基类的地方必须能透明地使用其子类对象
- 依赖倒置原则(DIP):高层模块不依赖于底层模块,都依赖于抽象;抽象接口不依赖于具体实现,具体实现依赖于抽象接口
- 接口隔离原则(LSP):类之间的依赖关系应该建立在最小的接口上
- 迪米特法则(LOD):一个软件实体应该尽可能少的与其他实体发生相互作用
- 开闭原则(OCP):软件中的对象(如类、模块、函数等)应该对于扩展开放,但是对于修改关闭
- 组合/聚合复用原则(CARP):尽量使用组合/聚合,而不是通过继承达到复用的目的
设计模式分类
创建型模式
在软件工程中,创建型模式是处理对象创建的设计模式。创建型模式关注的重点在于如何创建对象,其核心思想是要把对象的创建和使用相分离。创建型模式主要分为以下几种:
- 工厂方法模式
- 抽象工厂模式
- 生成器模式
- 原型模式
- 单例模式
结构型模式
在软件工程中,结构型模式介绍如何将对象和类组装成较大的结构,并同时保持结构的灵活和高效。结构型模式主要分为以下几种:
- 适配器模式
- 桥接模式
- 组合模式
- 装饰模式
- 外观模式
- 元模式
- 代理模式
行为模式
在软件工程中,行为模式用来识别对象之间的常用交流模式并加以实现,负责对象间的高效沟通和指责委派。行为模式主要分为以下几种:
- 责任链模式
- 命令模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 策略模式
- 模板方法模式
- 访问者模式