知识卡片

策略模式的优点与全部暴露的代价

普通读书笔记卡 · 1866.a.2

内容

[[策略模式的定义与三个角色]]带来三点收益:算法可自由切换;避免多重条件判断;扩展性良好 (新增策略只需新增类)。代价是所有具体策略类都必须对高层模块可见——调用方要了解整个 策略家族才能决定实例化哪个,违反[[迪米特法则的定义]],且策略间彼此难以复用。发散:这个 “暴露”缺陷提示策略模式几乎总需要搭配工厂方法来隐藏选择逻辑,纯策略模式很少单独出现。

参考来源

- 位置:《设计模式之禅(第2版)》第18章《策略模式》(源文件:_epub-src/text/part0082.html) - 结论依据:原文分三点列出优点(算法自由切换、避免多重条件判断、扩展性良好),并说明缺点"所有的策略类都需要对外暴露……这与迪米特法则是相违背的,我只是想使用了一个策略,我凭什么就要了解这个策略呢?那要你的封装类还有什么意义?" - 原始内容:算法可以自由切换……避免使用多重条件判断……扩展性良好……所有的策略类都需要对外暴露,上层模块必须知道有哪些策略,然后才能决定使用哪一个策略,这与迪米特法则是相违背的。