我正在阅读有关状态模式的链接。它看起来像策略模式吗?这两种模式之间的确切区别是什么?
5 回答
国家和战略之间的区别在于意图。使用 Strategy,算法的选择是相当稳定的。对于 State,“上下文”对象的状态变化会导致它从 Strategy 对象的“调色板”中进行选择。
策略模式与状态模式非常相似。区别之一是上下文包含状态作为实例变量,并且可以有多个任务的实现可以依赖于状态,而在策略模式中,策略作为参数传递给方法,上下文对象没有任何变量来存储它.
有关更多详细信息,请参阅java 示例教程中的策略设计模式
我认为一个主要的区别是:
-在状态模式中,我们将上下文本身作为参数传递给我们需要分配给上下文的状态具体类的方法,它做两件事:首先它将自己分配给发送的上下文,其次,它执行它的角色.
-在策略模式中,我们在第一次创建策略时将策略传递给上下文,因此它在整个程序中保持不变,除非我们使用“new”将相同的变量分配给内存中的新上下文(指针)和为它分配一个新策略,一段时间后垃圾收集器将使用其分配的策略消除旧上下文。
更清楚地说,策略对于一个上下文是固定的,一旦分配它就不能更改,即使上下文没有策略设置器。但是对于State,许多状态可以一个接一个地分配给同一个上下文,因为上下文有一个状态设置器。
我希望它是有用的。
在状态模式中,通常状态的一个动作会导致状态的变化;在策略模式中,策略的一个动作不会引起策略的改变。换句话说,状态的变化在于状态本身;战略的改变在于外部条件。
摘自 Steven Lott 的优秀书籍“Python 面向对象编程:构建健壮且可维护的面向对象 Python 应用程序和库”。
策略模式用于在运行时选择算法;通常,只会为特定用例选择其中一种算法。这里的想法是在设计过程中尽可能晚地在运行时提供实现选择。策略类定义很少知道其他实现;每个策略通常都是独立的。
另一方面,状态模式旨在允许随着某些过程的发展而动态地在不同状态之间切换。在我们的示例中,状态随着字节的消耗和不断变化的有效性条件的满足而改变。状态定义通常被定义为能够在各种状态对象之间切换的组。