知识卡片
策略模式与代理模式的区别在于接口是否相同
内容
[[策略模式的定义与三个角色]]中的Context借用了[[代理模式的定义与三个角色]]的委托思路, 关键区别是接口是否相同:Context和它封装的Strategy方法名可以不同,只是把策略包起来 提供统一入口;代理类必须实现和被代理对象相同的接口。发散:”持有引用+委托执行”只是许多 模式共享的底层技巧,决定属于哪个模式的是设计意图——策略关心提供可互换算法,代理关心 控制访问。
参考来源
- 位置:《设计模式之禅(第2版)》第18章《策略模式》(源文件:_epub-src/text/part0081.html)
- 结论依据:原文明确"策略模式的重点就是封装角色,它是借用了代理模式的思路……差别就是策略模式的封装角色和被封装的策略类不用是同一个接口,如果是同一个接口那就成为了代理模式",并展示Context的doAnythinig()方法名与Strategy的doSomething()方法名不同。
- 原始内容:策略模式的重点就是封装角色,它是借用了代理模式的思路,大家可以想想,它和代理模式有什么差别,差别就是策略模式的封装角色和被封装的策略类不用是同一个接口,如果是同一个接口那就成为了代理模式。