问题标签 [state-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
386 浏览

c++ - 在 C++ 中解决涉及状态机的前向声明问题

我最近在中断后回到了 C++ 开发,并且对状态设计模式的实现有疑问。我正在使用香草模式,完全按照 GoF 书。

我的问题是状态机本身是基于一些用作嵌入式系统一部分的硬件 - 所以设计是固定的,不能改变。这导致两个状态之间的循环依赖(特别是),我正在尝试解决这个问题。这是简化的代码(请注意,我尝试像往常一样使用标头来解决此问题,但仍然存在问题 - 我在此代码片段中省略了它们):

问题基本上是在状态模式中,状态转换是通过调用 Context 类中的 ChangeState 方法进行的,该方法调用下一个状态的构造函数。

由于循环依赖,我无法调用构造函数,因为无法预先定义“问题”状态的两个构造函数。

我看了这篇文章,模板方法似乎是理想的解决方案 - 但它不能编译,而且我对模板的了解相当有限......

我的另一个想法是尝试通过多重继承将 Helper 类引入子类状态,以查看是否可以指定基类的构造函数并引用状态子类的构造函数。但我认为那是相当雄心勃勃的......

最后,工厂方法设计模式的直接实现是解决整个问题的最佳方式吗?

0 投票
5 回答
5386 浏览

java - 状态模式:为什么状态不是单例?

我使用状态模式来实现一个简单的有限状态机。查看Wikipedia上给出的描述,更具体地说,查看建议的 Java 实现,我想知道为什么实现State接口的类(即各种状态)不是单例?

在建议的实现中,每当发生转换时都会创建一个新状态。然而,一个对象足以代表每个状态。那么,为什么每次发生转换时都浪费时间创建一个新实例呢?

0 投票
2 回答
3735 浏览

c++ - GOF 状态模式状态转换实现问题

首先,谁能解释当状态对象没有实例变量时如何共享状态对象?

本文摘自 GOF,第 308 页,第 3 项(后果部分):

状态对象可以共享。如果状态对象没有实例变量——也就是说,它们所代表的状态完全以其类型编码——那么上下文可以共享一个状态对象。当以这种方式共享状态时,它们本质上是轻量级的。

谁能解释这段文字?

其次,状态转换决策的方法是什么?我的意思是决定传播哪个下一个状态?

请帮忙。谢谢。

0 投票
2 回答
2856 浏览

java - Java中的状态模式

我已经阅读了有关状态模式的内容,现在我希望通过探索实现它的 Swing 应用程序(例如:计算器)来进一步了解我的知识。

我在哪里可以找到这样的教程?

它必须展示一个使用 Swing 的非常简单的应用程序。我对如何在 Swing 项目中使用状态模式感到困惑?

0 投票
2 回答
132 浏览

design-patterns - 可以在这里实现状态模式吗?

我有一个Request类,它可以处于以下状态之一:

草稿、已提交、已批准、已拒绝、InMission、已完成

可以通过调用以下方法之一来更改Request对象的状态。每个方法都可能包含一些参数,以进一步将某些数据与特定状态相关联:

我正在考虑在这里实现状态模式。我的每个状态类都将保存与它们相关的那些额外信息。我在这里实现状态模式的主要想法是不要在Request类本身中添加所有这些不相关的属性,例如:

你认为状态模式是一个很好的选择吗?

问候,

莫什

0 投票
2 回答
784 浏览

php - PHP 表单的状态设计模式是否矫枉过正?

我有一个页面,访问时会显示与视频相关的信息表:

  • 嵌入代码
  • 标题
  • 描述
  • 当前画廊
  • 缩略图

首次访问该页面时,此信息是只读的。

有一个选择菜单,其中包含以下选项:

  • 编辑描述
  • 创建缩略图(上传/替换)
  • 编辑嵌入代码
  • 更改图库
  • 删除视频

当用户选择一个选项时,会显示相同的初始数据表,但在必要时会显示相关的表单输入。

例如,如果选择了“编辑描述”,则页面会重新加载,并且描述文本将替换为文本输入。如果选择“创建缩略图”,则显示文件上传输入。

这个想法是将所有信息一起显示,但限制一次可以编辑的数量。

我知道状态模式是一种可能的解决方案,因为每条数据至少可以处于以下两种状态之一:

  1. 显示状态
  2. 表单输入状态

但是,我的问题是,使用状态模式会不会过大?

目前,每次访问页面时,表单的每个部分都会用一个 switch 语句决定它应该处于“显示”还是“输入”状态,然后进行相应的操作。我想知道实施状态模式设计是否会使更改表单和创建类似表单更容易。

谢谢!

0 投票
1 回答
752 浏览

java - 最佳实践:2D HUD 屏幕导航的设计模式

如果您的应用程序的 GUI 完全用于 2D 绘图,那么处理绘制内容和触摸位置的最佳实践应该是什么?

一个更好理解的例子:
我有一个带有地图的游戏。在这张地图上,我可以建造房屋和东西。
我还有一个可以扩展的信息栏。在扩展栏上,我绘制了一些关于游戏的信息,它还提供了更改不同值的界面。如果发生触摸,我必须检查信息栏是否扩展,以确定我是否要更改地图上的某些内容或栏上的某些内容。

这是由状态模式完成的,但我怀疑这是否正确,因为我认为由于可能存在“子状态”,它可能有点复杂。

所以基本上是一个问题:状态模式(来自 GoF)是处理纯图形 GUI 的最佳实践吗?

0 投票
2 回答
4270 浏览

design-patterns - 给我一个真实的、重要的状态模式使用

我正在寻找一个使用状态设计模式来解决或简化有趣或复杂状态转换的示例。有很多具有三四个简单状态的示例。但是现实生活项目中的代码有子状态和多个转换呢?真正激发使用模式的代码类型。奖励点指向代码!

0 投票
1 回答
561 浏览

nhibernate - Fluent NHibernate 映射 - 状态模式

我对 NHibernate / FNH 映射不太感兴趣,但我正在研究实现状态模式,并且喜欢 Derick Bailey 的文章的想法:

我相信这是不久前的事情,所以映射代码已经过时了,有人可以帮我更新一下 FNH 1.1 吗?

他的文章是这里的其余代码: http ://www.lostechies.com/blogs/derickbailey/archive/2008/11/26/mapping-a-state-pattern-with-nhibernate.aspx

非常感谢!

保罗

0 投票
1 回答
43 浏览

design-patterns - 模型配置文件作为模式实例

假设您有一个应用程序的配置文件。此配置文件专门存储有关某个用户的一些数据。您可以保留配置文件的详细信息并在每次运行时将其拉回。

配置文件是否适合状态模式?如果没有,是否有一个很好的启发式来模拟这种功能?