知识卡片

普通代理要求调用方只知道代理、不知道真实角色

普通读书笔记卡 · 1986.b

内容

普通代理是[[代理模式的定义与三个角色]]的加强约束:客户端只能访问代理,不能直接访问 真实角色。实现上让真实角色的构造函数强制要求传入代理实例参数,只有代理内部代码会调用 它。这样真实角色未来怎么改都不影响高层模块。发散:这类”用构造函数校验强制协作路径”把 设计意图从文档约定变成运行期可验证的代码约束,代价是主题类构造函数依赖代理类的存在。

参考来源

- 位置:《设计模式之禅(第2版)》第12章《代理模式》(源文件:_epub-src/text/part0055.html) - 结论依据:原文展示GamePlayer构造函数要求传入非空的IGamePlayer参数否则抛异常,只有GamePlayerProxy内部会用this调用它,说明"调用者只知代理而不用知道真实的角色是谁……在实际的项目中,一般都是通过约定来禁止new一个真实的角色,这也是一个非常好的方案"。 - 原始内容:普通代理就是我们要知道代理的存在……客户端只能访问代理角色,而不能访问真实角色……在该模式下,调用者只知代理而不用知道真实的角色是谁,屏蔽了真实角色的变更对高层模块的影响……尽量通过团队内的编程规范类约束。