什么是设计模式?
设计模式是一个通过定义、使用、测试去解决问题的方法。设计模式是在面向对象编程思想被发扬光大之后被人熟知的。
在软件工程中,设计模式是一般只针对设计中在给定条件下会重复性发生的问题而提出的一种通用性的可重用解决方案。
设计模式不是一种可以直接转化为代码的完整设计。它多用于描述在不同情况下解决问题的通用方案。
设计模式的概念在计算机科学领域的普及主要归功于1994年《设计模式:可复用面向对象软件的基础》一书的出版。即著名的GoF四人帮。
设计模式的分类
GoF共提出了23种设计模式。大体分为如下三种类型:
- 创造型设计模式
- 结构型设计模式
- 行为型设计模式
创造型模式:注重于完成对象的实例化。相对于一般直接实例化对象,设计模式会根据实际情况有选择地进行完成对象的实例化,这会为业务逻辑高度复杂化的情景提供足够的灵活。
根据GoF的定义,创造型模式主要包括五种:
- 抽象工厂设计模式
- 生成器设计模式
- 工厂方法设计模式
- 原型设计模式
- 单例设计模式
结构型模式:用于指导我们完成代码的结构划分。这样的结构设计能让代码更加清晰和易于理解,提高整体的可维护性。
根据GoF的定义,结构型设计模式主要包括7种:
- 适配器设计模式
- 桥接设计模式
- 组合设计模式
- 装饰设计模式
- 门面设计模式
- 享元设计模式
- 代理设计模式
行为型设计模式:主要用于定义对象之间的通信和控制流程。其中主要的设计模式都非常注重优化对象见的数据交互方式。
根据GoF的定义,行为型设计模式主要包括11种:
- 职责链设计模式
- 命令设计模式
- 解释器设计模式
- 迭代器设计模式
- 中介者设计模式
- 备忘录设计模式
- 观察者设计模式
- 策略设计模式
- 状态设计模式
- 模板方法设计模式
- 访问者设计模式
对于初学者来说,学习设计模式很枯燥。有时候不知道该记住什么内容。所以我们在学习过程中,需要弄清楚一下问题:
- 模式名称?
- 模式类型?(创造or结构or行为)
- 模式的作用或者目的?
- 什么情况下使用该模式?
- 能否举例该模式的实例(面试常考)?
- 画出UML图(面试常考)?具体是使用类图还是交互图
- 都有哪些对象在模式中参加活动?最好能列出模式中使用的对象和类,并说明各自角色?
- 在该模式中,使用类和对象是如何进行交互的?
- 通过该设计模式能够获得什么效果?有没有副作用?如何权衡利弊?
- 如何实现该模式(面试常考)?