设计模式-17-结构型-总结对比

🏗️ Java 结构型设计模式 总结对比

结构型模式的核心是 —— 如何组合类和对象形成更大的结构,同时保证灵活性和可维护性。


🧱 一张总览表

模式名 目的 关注点(关键思想) 应用典型场景
适配器 让接口不兼容的类能协同工作 接口转换(旧接口变新接口) 老系统接入新接口、统一三方回调格式
桥接 分离抽象和实现,解耦两者关系 抽象与实现分离 多维变化(如 支付方式 × 渠道)
装饰器 给对象动态添加新功能,不改原类 功能增强,类似“包裹” Java I/O、权限增强、日志增强等
代理 控制对对象的访问,增加额外控制行为 中间人 控制访问 权限校验、远程调用、懒加载、日志、安全控制等
外观 简化多个子系统的调用,提供统一入口 隐藏内部复杂性,简洁对外接口 Controller 调用多个 Service、微信SDK封装等
组合 对象组成树形结构,统一操作叶子与容器对象 部分-整体统一处理 文件夹结构、UI组件树、组织架构
享元 大量对象共享内部状态,节省内存 状态共享,分离内部/外部状态 字体/图标/棋子/连接池/缓存对象/字符串池等

🧠 分类与对比(图解思路)

1
2
3
4
5
6
7
[ 适配器 ] - 解决接口不兼容问题,桥接新旧系统
[ 桥 接 ] - 拆分维度,解耦抽象与实现
[ 装饰器 ] - 扩展功能,用“叠加方式”增强行为
[ 代 理 ] - 控制访问,加权限、日志、安全
[ 外 观 ] - 简化子系统调用,对外暴露统一接口
[ 组 合 ] - 树形结构,统一处理叶子和容器
[ 享 元 ] - 共享对象状态,提升性能,省内存

🤔 它们的区别和适用场景?

模式对比 区别点说明 举例场景
适配器 vs 装饰器 适配器是接口不一致,装饰器是功能增强 微信 vs 支付宝回调参数 → 适配器;接口加日志 → 装饰器
装饰器 vs 代理 装饰器主要是业务增强(关注功能),代理是访问控制(权限/缓存) 装饰器 → 增强功能,代理 → 拦截权限
外观 vs 代理 外观是简化接口(主动),代理是控制访问(附加逻辑) 外观:提供一站式服务;代理:限制操作入口
桥接 vs 组合 桥接是多维度解耦(两个变化维度),组合是层级结构统一处理 支付 × 支付方式(桥接),菜单树结构(组合)
享元 vs 单例 享元是多个共享实例(池),单例是全局唯一实例 棋盘多个棋子共享一个对象(享元);全局配置中心(单例)

🧩 一个形象的比喻

模式 类比到公司中
适配器 翻译员(让说不同语言的人能沟通)
桥接 部门架构(前台和后台分工,互不影响)
装饰器 装饰师(在不动房子结构的前提下增加装修)
代理 秘书(代替老板接电话,加过滤)
外观 前台小姐姐(你不需要了解公司结构,统一接待入口)
组合 组织结构图(员工、部门、公司都统一按组织节点操作)
享元 复印模板(每次只填变的部分,模板共享)

✅ 总结一句话记忆法(口诀)

适配接口通,桥接解耦清,装饰加功能,代理控访问,外观门面精,组合统一形,享元省内存。

作者

bufx

发布于

2025-07-24

更新于

2025-07-24

许可协议