Head First 设计模式: 第十一课 代理模式
OOP村齐家的少爷喜欢上了尹家的小姐,但有鉴于礼法,双方长辈反对, 两个年轻人不能长时间见面。于是齐少爷的书童 和 尹小姐的丫环当起了连络人。 尹小姐想多了解齐少爷,派丫环去探探舌漏,丫环找到从小就跟着齐家少爷的书童,书童乘机说尽好话…… [ 这里丫环就是小姐的代理; 小姐要了解少爷,所以小姐是客户对象,丫环是客户辅助对象,书童是服务辅助对象,少爷是服务对象; 这个模式叫远程代理。]
齐少爷和尹小姐书信来往好久了,齐少爷记不得以前写过什么良言美句,书童会意,把保存的书信拿了出来参考。[ 书童就好比缓存代理 ]
齐家毕竟是大户人家,也指望齐少爷他日金榜题名,齐老太太天天来检查齐少爷的读书情况。这天少爷溜出去与尹小姐私会,书童穿了少爷的衣服在窗后装模作样,老太太看到窗影很高兴。 [ 虚拟代理 ]
书童身材和少爷还是比较相似的,少爷毕竟是老爷的儿子,萧峰和萧远山也很难分清的。 这天,齐老爷有点喝高了,想去留香院找小春,想起了儿子(老不正经!),于是和书童(正扮演少爷)说: 今天你扮成我,你的事过几天我做主。 于是书童又穿上老爷的衣服,贴上胡子,还有模有样。 [ 装饰者模式: 川剧《变脸》 == 本体就是那个,但外表已经改变。 ]
代理模式: 为另一个对象提供一个替身或占位符以控制对这个对象的访问。
[ 使用代理模式创建代表(representative)对象,让代表对象控制某对象的访问,被代理的对象可以是远程的对象 、创建开销大的对象或需要安全控制的对象。 ]
|
|_____> 远程代理控制访问远程对象;
|_____> 虚拟代理控制访问创建开销大的资源;
|_____> 保护代理基于权限控制对资源的访问;
设计原则: 类应该只有一个改变的理由。
模式对比:
· 装饰者 ── 包装另一个对象,并提供额外的行为;
· 外观 ── 包装许多对象以简化它们的接口;
· 代理 ── 包装另一个对象,并控制对它的访问;
· 适配器 ── 包装另一个对象,并提供不同的接口;