知识卡片

策略模式要求算法平行状态模式要求二维状态行为耦合

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

内容

[[策略模式与状态模式的环境角色职责差异]]决定两者成立前提不同。策略模式算法必须 平行、可互相替换(如MD5/DES/RSA互不依赖),若算法间有依赖关系硬套会产生”坏味道”; 状态模式要求对象同时有状态和行为两个维度,只有状态没有随之变化的行为就没意义。发散: 复杂度也不同——策略模式简单易扩展,状态模式要同时描述状态迁移与行为表现两条线,更 复杂,不适合大规模扩张。

参考来源

- 位置:《设计模式之禅(第2版)》第32章《行为类模式大PK》32.2.3节(源文件:_epub-src/text/part0144.html) - 结论依据:原文总结"策略模式是一系列平行的、可相互替换的算法封装后的结果,这就限定了它的应用场景:算法必须是平行的,否则策略模式就封装了一堆垃圾,产生了'坏味道'。状态模式则要求有一系列状态发生变化的场景……一个对象必须具有二维(状态和行为)描述才能采用状态模式,如果只有状态而没有行为,则状态的变化就失去了意义",并说明状态模式"通常都比较复杂……一般不会进行大规模的扩张和修正"。 - 原始内容:策略模式是一系列平行的、可相互替换的算法封装后的结果,这就限定了它的应用场景:算法必须是平行的,否则策略模式就封装了一堆垃圾,产生了"坏味道"。状态模式则要求有一系列状态发生变化的场景,它要求的是有状态且有行为的场景……如果只有状态而没有行为,则状态的变化就失去了意义……状态模式则通常比较复杂……一般不会进行大规模的扩张和修正。