策略设计模式 vs 状态设计模式

4

我正在阅读这个关于状态模式的链接。它看起来像是策略模式吗?这两种模式之间的确切区别是什么?


1
http://dofactory.com/Patterns/Patterns.aspx - MilkyWayJoe
5个回答

4
状态模式和策略模式的区别在于意图。在策略模式中,算法的选择相当稳定。而在状态模式中,“上下文”对象状态的变化会导致它从其“调色板”中选择策略对象。请参见http://sourcemaking.com/design_patterns/state

2
策略模式与状态模式非常相似。其中一个区别是,上下文包含状态作为实例变量,并且可以有多个任务的实现取决于该状态。而在策略模式中,策略作为参数传递给方法,上下文对象没有任何变量来存储它。要了解更多详细信息,请参见Java示例教程中的策略设计模式

0
在状态模式中,通常状态的一个动作会导致状态的改变;而在策略模式中,策略的一个动作不会导致策略的改变。换句话说,状态的改变在于状态本身,而策略的改变则取决于外部条件。

0

我认为一个主要的区别在于:

- 在状态模式中,我们将上下文本身作为参数传递给我们需要分配给上下文的状态具体类的方法,并且它会执行两个操作:首先将自己分配给发送的上下文,其次执行其角色。

- 在策略模式中,我们在创建上下文时将策略传递给上下文,因此它在整个程序中保持不变,除非我们使用“new”将相同的变量分配给内存中的新上下文(指针)并为其分配新的策略,一段时间后垃圾收集器将消除具有其分配策略的旧上下文。

更明确地说,策略对于一个上下文是固定的,一旦分配就不能更改,即使上下文没有策略设置器。但是对于状态,许多状态可以依次分配给同一个上下文,因为上下文具有状态设置器。

希望这很有用。


0

来自Steven Lott的优秀书籍"Python面向对象编程:构建强大且易于维护的面向对象Python应用程序和库"

策略模式用于在运行时选择算法;通常,只有其中一个算法会被选择用于特定的用例。这里的想法是尽可能晚地在设计过程中提供实现选择。策略类定义很少意识到其他实现;每个策略通常都是独立的。

另一方面,状态模式旨在允许动态地在不同状态之间切换,随着某些过程的演变。在我们的示例中,随着字节的消耗和不断满足的有效性条件集,状态发生了变化。状态定义通常作为一组定义,并具有在各种状态对象之间切换的能力。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接