知识卡片
代理类可以承担超出转发的独立职责
内容
[[代理模式的定义与三个角色]]中的代理类不局限于机械转发,还可承担自己独有的职责。游戏 代练场景中GamePlayerProxy除转发登录打怪升级,还实现count()计算代练费用——这个计费 逻辑真实角色完全不知道。代理可以在调用前后插入预处理、过滤、事后处理等任意逻辑,也可 同时代理多个真实角色。发散:只要能在方法调用前后插入代码,几乎任何横切关注点都可用同样 结构承载,这是动态代理/AOP的基础。
参考来源
- 位置:《设计模式之禅(第2版)》第12章《代理模式》(源文件:_epub-src/text/part0055.html)
- 结论依据:原文给GamePlayerProxy新增IProxy接口和count()方法计算升级费用,并说明"代理的目的是在目标对象方法的基础上作增强,这种增强的本质通常就是对目标对象的方法进行拦截和过滤……代理的职责并不一定单一,它可以组合其他的真实角色,也可以实现自己的职责"。
- 原始内容:代理的目的是在目标对象方法的基础上作增强,这种增强的本质通常就是对目标对象的方法进行拦截和过滤……代理类不仅仅是可以有自己的运算方法,通常的情况下代理的职责并不一定单一……代理类可以为真实角色预处理消息、过滤消息、消息转发、事后处理消息等功能。