JAVA设计模式-代理模式和装饰器(者)模式的区别 作者:马育民 • 2023-02-05 10:24 • 阅读:10044 # 介绍 两者写法相似,但实现的功能有些区别: - 装饰,侧重对类的功能扩展,即:**扩展其他方法** - 代理,侧重对类原方法的增强。**没有** 扩展其他方法 # 例子 ## 定义接口 定义 `IChild` 接口,该接口有 `eat()` 方法 ``` public interface IChild { void eat(); } ``` ## 创建实现类 创建 `Child` 类,实现该接口: ``` public class Child implements IChild{ @Override public void eat() { Log.e("TAG","孩子吃饭"); } } ``` ## 提出问题 由于孩子太小,不会自己吃饭,需要妈妈喂饭才能吃饭 ### 分析 该需求 **不需要增加新方法**,只是 **对原方法进行增强**,所以通过 **代理模式** 解决 ### 解决 (代理模式) 创建父母(代理)类: ``` public class Parent implements IChild{ private Child child; private Parent(Child child){ this.child = child; } @Override public void eat() { System.out.println("妈妈喂饭"); child.eat(); System.out.println("妈妈给擦嘴"); } } ``` ## 提出新需求 孩子长大了,还要学习 ### 分析 该需求明显是 **需要增加新方法**,所以通过 **装饰器模式** 解决 创建孩子扩展(装饰)类: ``` public class ChildWrapper implements IChild{ private Child child; public ChildWrapper(Child child){ this.child = child; } public void study(String s) { System.out.println("学习"+s); } } ``` ## 总结 - 装饰,**增加其他方法** - 代理,对类原方法的之前、之后增加额外代码。**没有** 增加其他方法 参考: https://www.jianshu.com/p/c06a686dae39 原文出处:http://malaoshi.top/show_1IX4uMVW7BQj.html