首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
一文区分 装饰器模式 vs 代理模式
📅 2026/10/9 2:56:46
✍️ 爱科研究院
👁 阅读 3,247
快速判断想控制能不能调用权限、延迟创建→代理想给对象叠加额外功能可以自由多层套 →装饰器核心区分代理模式控制访问代理对象代替原始对象干活可以做权限、日志、延迟加载控制访问装饰器模式动态增强功能给原有对象叠加额外行为不控制访问只是加附加逻辑。两者结构非常像都包装目标对象实现同一个接口但是意图完全不同。1. 代理模式Proxy Pattern意图为目标对象提供一个代理对象由代理控制对目标对象的访问。 常见类型静态代理、动态代理 (JDK/CGLIB)、远程代理、虚拟代理。适用场景权限控制访问目标对象前校验登录 / 权限无权限直接拦截不调用真实对象延迟加载虚拟代理大对象图片、重型服务需要的时候才创建真实对象远程代理访问远程服务RPC代理封装网络调用细节日志 / 埋点次要但重点是代理接管访问入口特点代理类和目标类是一对一一般提前确定代理谁不能随意多层叠加。Java 静态代理示例// 统一接口 public interface UserService { void addUser(); } // 真实对象 public class UserServiceImpl implements UserService { Override public void addUser() { System.out.println(【真实对象】新增用户); } } // 代理对象控制访问 public class UserServiceProxy implements UserService { // 持有真实对象 private UserService target; public UserServiceProxy(UserService target) { this.target target; } Override public void addUser() { // 代理访问控制权限校验 System.out.println(【代理】校验权限); if (checkPermission()) { target.addUser(); // 通过校验才访问真实对象 System.out.println(【代理】操作后记录日志); } else { System.out.println(【代理】权限不足禁止访问); } } private boolean checkPermission() { return true; } } // 测试 public class TestProxy { public static void main(String[] args) { UserService target new UserServiceImpl(); UserService proxy new UserServiceProxy(target); proxy.addUser(); } }输出【代理】校验权限 【真实对象】新增用户 【代理】操作后记录日志典型业务Spring AOP 底层就是动态代理用来拦截方法做事务、权限。2. 装饰器模式Decorator Pattern意图动态给对象增加额外职责不需要修改原类。装饰器本身也实现同一个接口可以多层嵌套叠加。核心包装后原有对象能力增强不是控制访问。适用场景IO 流BufferedReader装饰FileReader、DataOutputStream装饰FileOutputStream经典案例咖啡订单基础咖啡可以动态加牛奶、糖、巧克力任意组合叠加UI 组件窗口可以动态增加滚动条、边框特点可以无限多层装饰叠加装饰器的目的是扩展功能不是拦截访问。Java 示例咖啡// 公共抽象组件 public abstract class Coffee { public abstract String getDesc(); public abstract double getPrice(); } // 基础对象美式咖啡 public class Americano extends Coffee { Override public String getDesc() { return 美式咖啡; } Override public double getPrice() { return 15; } } // 装饰器抽象类继承Coffee持有Coffee对象 public abstract class CoffeeDecorator extends Coffee { protected Coffee coffee; public CoffeeDecorator(Coffee coffee) { this.coffee coffee; } } // 具体装饰器加牛奶 public class MilkDecorator extends CoffeeDecorator { public MilkDecorator(Coffee coffee) { super(coffee); } Override public String getDesc() { return coffee.getDesc() 牛奶; } Override public double getPrice() { return coffee.getPrice() 3; } } // 具体装饰器加糖 public class SugarDecorator extends CoffeeDecorator { public SugarDecorator(Coffee coffee) { super(coffee); } Override public String getDesc() { return coffee.getDesc() 糖; } Override public double getPrice() { return coffee.getPrice() 1; } } // 测试 public class TestDecorator { public static void main(String[] args) { // 基础咖啡 牛奶 糖多层嵌套装饰 Coffee coffee new Americano(); coffee new MilkDecorator(coffee); coffee new SugarDecorator(coffee); System.out.println(coffee.getDesc() 价格 coffee.getPrice()); } }输出美式咖啡 牛奶 糖价格19.03. 对比总结表维度代理模式装饰器模式核心意图控制 / 管理对目标对象的访问动态增强对象功能叠加附加行为组合关系代理包装目标一般一对一很少多层嵌套装饰器可以无限多层嵌套自由组合新增能力代理本身不新增业务能力只是拦截、校验、转发装饰器新增功能缓冲、配料典型案例Spring AOP 动态代理、RPC 远程代理Java IO 流、咖啡配料使用者视角使用者拿到代理感知不到真实对象存在使用者依然操作原对象一层一层叠加增强
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/9 2:56:46
【ICRA 2026】VeriGraph:以场景图为可验证中间表示的机器人任务规划|从具身大模型规划验证视角
2026/10/9 2:56:46
《创业之路》-1024-细读商业经典 - AI 是一个普惠技术,其技术本身带来的原始创新能力,正在颠覆美国在原始创新上的优势。
2026/10/9 2:56:46
你不是记不住单词,只是没找到对的方式
2026/10/9 4:06:52
BST专项:中序遍历+递归返回值破解LeetCode 21-29题
2026/10/9 4:06:52
claude-mem 记忆系统设计:抽取、存储与召回三段式实战
2026/10/9 4:06:52
生成式AI驱动需求分析、测试用例与质量度量实践
2026/10/9 4:06:52
配电主站日志异常检测数据集:面向真实运维场景的AI训练资源
2026/10/9 4:06:51
神经网络视角下的小微企业信贷风险评估:从评分卡到GNN的建模路线
2026/10/9 4:01:51
Java多人联机飞机游戏源码解析:Socket双端架构与联机实战
2026/10/9 0:01:35
RISC-V裸机启动全流程:从复位向量到main函数的七步实现
2026/10/9 0:01:35
Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南
2026/10/9 0:01:35
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错
2026/10/8 5:02:14
Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化
2026/10/9 1:10:43
多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系
2026/10/9 3:31:49
hindsight:面向LLM应用的事后可观测性工程实践
2026/10/8 4:30:43
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/9 3:32:01
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/8 4:32:33
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)