状态模式

对于 Java 开发人员来说,重要的是要清楚地了解核心 Java 应用程序中状态和策略设计模式之间的区别,以便正确使用它们。

  • 尽管状态和策略设计模式具有相似的结构,并且它们都基于开放封闭设计原则,代表 SOLID 设计原则中的“O”,但它们的意图完全不同。
  • Java中的策略设计模式用于封装一组相关的算法,为客户端提供运行时的灵活性。客户端可以在运行时选择任何算法,而无需更改使用 Strategy 对象的 Context 类。
  • 策略模式的一些流行示例是编写代码,它使用加密、压缩或排序算法等算法。
  • 现在可以清楚地看到 Strategy 和 State 模式之间的区别,它们的意图是不同的。状态模式帮助对象管理状态,而策略模式允许客户端选择不同的行为。另一个不容易看出的区别是谁推动了行为的改变。

策略模式

在 Strategy 模式下,它是 client,它提供与 Context 不同的策略,在 State 模式下,状态转换由 Context 或 State 本身管理。此外,如果在 State 对象本身中管理状态转换,它必须持有上下文的引用,以便它可以调用setState()方法来更改上下文的当前状态。自动售货机是最受欢迎的例子之一。

所以到目前为止,注意到状态和策略在结构上是相似的,但它们的意图是不同的。因此,下面是 Java 中状态和策略设计模式之间的主要关键区别,它们在它们的类中看起来很相似,它们都执行开放封闭设计原则并封装行为。使用 Strategy 设计模式,封装算法或策略,在运行时提供给 Context,可能作为参数或组合对象,并使用 State Pattern 来管理 Java 中的状态转换。

状态模式 策略模式
在状态模式中,一个单独的状态可以包含Context的引用,以实现状态转换。 但是策略不包含上下文的引用,它们在那里被使用。
State封装了一个对象的状态。 策略模式封装的是一种算法或策略。
状态模式帮助一个类在不同的状态下表现出不同的行为。 策略模式封装了一组相关的算法,并允许客户端在运行时通过组合和委托使用可交换的行为。
状态是上下文对象本身的一部分,随着时间的推移,上下文对象会从一个状态过渡到另一个状态。 它可以作为一个参数传递给使用它们的对象,例如Collections.sort()接受一个比较器,这是一个策略。
状态模式定义了一个对象的 “什么”和 “什么时候”部分。例如: 当一个对象处于某种状态时,它能做什么。 策略模式定义了对象的 “如何 “部分。例子: 一个排序对象如何对数据进行排序。
状态转换的顺序在状态模式中是明确定义的。 而策略模式则没有这样的要求。客户可以自由地选择他所选择的任何策略实现。
状态的改变可以由Context或状态对象本身完成。 而策略的改变则由客户完成。
策略模式的一些常见例子是封装算法,例如排序算法、加密算法或压缩算法。 认识到使用状态设计模式是相当容易的。
如果看到,代码需要使用不同种类的相关算法,那么就可以考虑使用策略模式。 如果需要管理状态和状态转换,没有大量的嵌套条件语句,状态模式就是要使用的模式。

Java 中状态和策略设计模式的区别

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:Java 中状态和策略设计模式的区别
本文链接:https://www.vsdiffer.com/vs/difference-between-state-and-strategy-design-pattern-in-java.html
免责声明:以上内容仅代表 个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。