知识卡片
策略暴露数据
内容
策略对象常需要上下文提供数据才能运行,数据传多了会增加耦合,传少了又限制算法能力。发散:策略接口的参数设计,是灵活性和封装性的交易。
参考来源
- 位置:第5章《行为型模式》5.9节「Strategy(策略)」9.实现第1点「定义Strategy和Context接口」(源文件:_epub-src/OEBPS/Text/part0089.xhtml)
- 结论依据:原文明确讨论了Context向Strategy传递数据的两种方式的权衡——将数据作为参数传给Strategy会解耦但可能传递不需要的数据,让Strategy持有Context引用则耦合更紧密,直接支持卡片对策略对象需要上下文提供数据、数据传多传少各有代价的论述。
- 原始内容:"一种办法是让Context将数据放在参数中传递给Strategy操作……但另一方面,Context可能发送一些Strategy不需要的数据。另一种办法是让Context将自身作为一个参数传递给Strategy……但现在Context必须对它的数据定义一个更为精细的接口,这将Strategy和Context更紧密地耦合在一起。"