23 种设计模式定义
- 单例模式(Single Pattern):某个类只能存在一个对象实例
- 工厂模式(Factory Pattern):由工厂对象决定创建出哪种产品类的实例
- 原型模式(Prototype Pattern):用原型实例指定创建对象种类,并通过拷贝原型创建新的对象
- 建造者模式 / 生成器模式(Builder Pattern):将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象
- 适配器模式(Adapter Pattern):将某个类的接口转换成客户端期望的另一个接口表示
- 桥接模式(Bridge Pattern):将实现与抽象分离,放在两个不同的类层次中,可以独立改变
- 装饰者模式(Decorator Pattern):动态地将新功能附加到对象上
- 组合模式 / 部分整体模式(Composite Pattern):依据树形结构来组合对象,用来表示部分以及整体层次
- 外观模式 / 过程模式(Facade Pattern):为调用端提供统一的调用接口
- 享元模式 / 蝇量模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象
- 代理模式(Proxy Pattern):通过代理对象访问目标对象
- 模板模式 / 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟到子类中
- 命令模式(Command Pattern):将发起请求的对象与执行请求的对象解耦
- 访问者模式(Visitor Pattern):将数据结构与数据操作分离
- 迭代器模式(Iterator Pattern):提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素
- 观察者模式(Observer Pattern):对象之间多对一依赖的一种设计方案
- 中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互
- 备忘录模式(Memento Pattern):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态
- 解释器模式(Interpreter Pattern):给定一个语言并定义其文法表示,使用该解释器来解释语言中的句子
- 状态模式(State Pattern):解决对象在多种状态转换时,需要对外输出不同的行为的问题
- 策略模式(Strategy Pattern):定义算法族,分别封装起来,让他们之间可以互相替换
- 职责链模式 / 责任链模式(Chain of Responsibility Pattern):为请求创建一个接收者对象的链
6、23 种设计模式举例、源码及优缺点
分类 | 设计模式 | 举例 | 源码 | 优点 | 缺点 |
---|---|---|---|---|---|
创建型 | 单例模式 | Singleton | JDK 中java.lang.Runtime | 节省资源,提高性能 | |
~ | 工厂模式 | 披萨店 | JDK 中Calendar | 统一管理,便于维护 | |
~ | 原型模式 | 克隆羊 | Spring 中ApplicationContext | 简化过程,提高效率 | 复杂;违背 OCP |
~ | 建造者模式 | 盖房子 | JDK 中StringBuilder | 解耦创建过程 | |
结构型 | 适配器模式 | 插座 | SpringMVC 中HandlerAdapter | 兼容性 | |
~ | 桥接模式 | 手机 | JDBC 中Driver | 分离抽象与实现 | |
~ | 装饰者模式 | 星巴克咖啡 | JDK 中FilterlnputStream | 动态扩展功能 | |
~ | 组合模式 | 学校院系 | JDK 中HashMap | 明确部分与整体层次 | |
~ | 外观模式 | 影院管理 | MyBatis 中Configuration | 屏蔽细节,简化操作 | 过多不利于维护 |
~ | 享元模式 | 网站展示 | JDK 中Integer | 降低内存,提高效率 | 复杂 |
~ | 代理模式 | 教师教书 | JDK 中Proxy | 扩展功能,更加安全 | |
行为型 | 模板模式 | 豆浆制作 | Spring 中AbstractApplicationContext | 统一算法,代码复用 | 过多不利于维护 |
~ | 命令模式 | 智能生活 | Spring 中JdbcTemplate | 解耦请求发起与执行 | 复杂 |
~ | 访问者模式 | 测评系统 | 解耦数据结构与操作 | 违背迪米特、依赖倒转 | |
~ | 迭代器模式 | 学校院系 | JDK 中ArrayList | 统一遍历 | 过多不利于维护 |
~ | 观察者模式 | 天气预报 | JDK 中Observable | 动态添加三方 | |
~ | 中介者模式 | 智能家庭 | 封装交互 | 复杂 | |
~ | 备忘录模式 | 游戏角色状态恢复 | 方便恢复状态 | 占用资源,消耗内存 | |
~ | 解释器模式 | 四则运算 | Spring 中SpelExpressionParser | 可扩展性 | 调试复杂;效率低 |
~ | 状态模式 | APP 抽奖 | 借贷平台 | 分离状态 | 过多不利于维护 |
~ | 策略模式 | 鸭子 | JDK 中Comparator | 分离不变与变化 | 过多不利于维护 |
~ | 职责链模式 | 采购审批 | SpringMVC 中HandlerExecutionChain | 分离请求与处理 | 调试复杂;影响性能 |
整理难免有误,欢迎大家批评指正!
尚硅谷 Java 设计模式(图解 + 框架源码剖析)学习笔记