设计模式(23种)

设计模式概念 设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。定义:描述在软件设计过程中的一些问题以及解决方案 重要要素:模式名

设计模式概念

设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

  • 定义:描述在软件设计过程中的一些问题以及解决方案
  • 重要要素:模式名称(概念)、问题(when)、解决方案(how)、效果(优缺点)、
  • 按目的:创建型、结构型、行为型
  • 按作用范围:类模式(继承复用、关系在编译时确定)、对象模式(合成复用、关系在运行时确定)

其他要素:别名、动机、结构、模式角色、合作关系、实现方法、适用性、已知应用、例程、模式扩展和相关模式

设计模式中核心研究对象

设计模式中
核心研究对象
层级 相当于 说明
依赖对象 底层 具体干活的员工 简单对象、含有最终实现功能的方法(对修改封闭)
调用者对象 高层 老板指挥员工干活 复杂对象、调用者通过继承或合成复用,得到底层依赖对象:
1.调用依赖对象的方法,并增强功能(对扩展开放)
2.随意切换依赖对象(LSP、DIP)
中间人对象 中层 员工太多的时候
需要聘请经理协助管理员工

创建型设计模式(5种)

创建对象

结构型设计模式(7种)

调用者对象,通过继承或合成,持有一个或多个依赖对象,从而调用(复用)这些依赖对象的方法

结构型模式本质:介绍了老板如何招揽若干员工,从而指挥这些员工干活

  1. 类模式:继承复用
设计模式 依赖对象(父类) 调用者(子类) 调用者的方法
类适配器模式Adapter Adaptee适配者 Target接口
ClassAdapter类适配器
通过继承,调用父类方法
  1. 对象模式:合成复用
依赖对象的
类型和数量
相当于 单个依赖 多个依赖 多个依赖中的每个作为调用者的
某个具体类依赖 特殊事情的临时工 对象适配器模式代理模式
Adapter、Proxy
外观模式
Facade
一个属性
某个接口依赖 特定岗位的员工 桥接模式
Bridge
享元模式
Flyweight
(共享结构)
一个键值对
所有依赖构成HashMap属性
自身接口依赖
(调用者接口)
全能的员工 装饰模式
Decorator
(链式结构)
组合模式
Composite
(树状结构)
一个数组元素
所有依赖构成Array属性
设计模式 依赖对象类 调用者类 调用者中注入依赖方式及方法
对象适配器 Adaptee适配者 Target接口
ObjectAdapter对象适配器
1.通过构造函数(传参)注入
2.依赖具体类对象,
调用具体类的方法
代理 Subject接口
RealSubject真实主题
Subject接口
Proxy代理
1.通过构造函数(new)注入
2.依赖具体类对象,
调用并增强具体类的方法
外观 SubSystem子系统 Facade外观 1.通过构造函数(new)注入
2.依赖多种具体类对象,
调用多种具体类对象的多个方法
桥接 Implementor接口
ConcreteImplementor具体实现
Abstraction抽象类
RefinedAbstraction扩展抽象
1.通过构造函数(传参)注入
2.依赖接口类型对象,
调用并增强接口的方法
享元 Flyweight接口
ConcreteFlyweight具体享元
FlyweightFactory享元工厂 1.通过普通方法(new)注入
2.依赖某接口类型多个对象HashMap,
将对象从HashMap中获取
若不存在则创建对象,
若存在则直接返回对象
装饰 Component接口
Decorator抽象装饰
Decorator类
ConcreteDecorator具体装饰
1.通过构造函数(传参)注入
2.依赖自身接口类型对象,
调用并增强接口的方法
组合 Composite接口
Leaf叶子
Composite接口
Composite树枝
1.通过普通方法(传参)注入
2.依赖自身接口类型多个对象数组,
将对象从数组中添加或移除,
将数组元素的统一看待

行为型设计模式(11种)

若干对象协作完成任务

被动执行
策略模式:老板(环境类)挑人(策略类)干活
命令模式:老板(调用者类)挑人(命令类)干活、被人(命令类)转包给第三方(接收者类)做
责任链模式:老板(父类)挑人(子类)干活、被人(子类)踢皮球给别的同事(其他子类)做、可能会一直踢皮球下去直到最终有人干活(链式结构)
解释器模式:老板(环境类)挑人(解释器)干活、被人(子类)踢皮球给多个别的同事(其他子类)做、可能会一直踢皮球下去直到最终有多个人干活(树状结构)

主动推荐
状态模式:给老板(环境类)推荐自己或别的同事(状态类)去干活,老板会让被推荐的人干活
观察者模式:给老板(主题类)推荐自己(观察者类)去干活、老板会让所有人(观察者类)都去干活(主题类)
中介者模式:给老板(中介者类)推荐自己或同事(同事类)去干活,选谁(同事类)还由老板(中介者类)决定

引入经理
迭代器模式:经理(具体聚合类)登记了一堆人(元素)、中间人当有老板(具体迭代器)过来时,会把所有人交给老板(具体迭代器)、老板挑人(元素)干活(策略)
备忘录模式:经理(管理者类)登记了一堆人(备忘录)、中间人当有老板(发起人)过来时,会让某个人(备忘录)推荐给老板,老板让这个人干活(状态)
访问者模式:经理(具体聚合类)登记了一堆人(具体元素类)、中间人当有老板(访问者)过来时,会让所有人(具体元素类)都推荐自己给老板(访问者)、老板会让人这个人干活(状态)

适配器模式:转换方法-springmvc的handlerAdapter
代理模式:为对象提供一个替身-代理远程对象、创建开销大的对象、需要安全控制的对象:静态代理(同一接口)、动态代理(JDK代理、接口代理)、Cglib代理