问题标签 [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 投票
2 回答
3010 浏览

java - 没有枚举的状态模式和休眠

我在 Java 中使用 Hibernate 搜索了 State 模式的实现,并找到了几个对使用 Enums 的解决方案的引用,以便提供一种灵活的方式来向情况中添加新的 State。

我喜欢这里的解决方案,其中反射用于从保存 ConcreteState 类名称的表字段“状态”的值创建状态对象:http: //nerdboys.com/2007/06/08/state-pattern -持久性与休眠/

但是不鼓励这种解决方案,因为与保存整数值相比,在数据库中保存类型为 com.myCompany.myProject.asdasd.ConcreteState 的字符串值会浪费空间。所以我想知道是否有办法将可能的状态保存在表格中,例如:

customer_states(PK id INT,className VARCHAR)

并修改我的客户表以便对状态有一个 FK,例如:

客户(PK id INT,名称 VARCHAR,FK 状态 INT)

所以我不会使用比需要更多的磁盘空间,并且我会保持客户状态的一致性,因此很容易向情况添加新状态......但是,你将如何在你的 UserType 中实现它?

谢谢!

0 投票
3 回答
139 浏览

java - 如果我只有几个州,状态模式可能会有所帮助吗?

如果某个东西只有两到三个状态,那么使用状态模式是不是有点矫枉过正?

0 投票
3 回答
195 浏览

c# - 内部类和/或部分类是否脱离了状态设计模式的原则?

在我不断寻求掌握各种设计模式的过程中,我遇到了“状态”设计模式。

首先,让我解释一下我试图在哪里使用这种模式。我有一个表格,我想申请状态。我的程序具有三种状态:Configuration、Processing 和 ProcessingComplete。当表单更改状态时,表单的各个组件将变为启用/禁用、可见/不可见等。

根据我对状态模式的理解,所有这些更改(使组件可见/不可见、启用/禁用等)都应该发生在包含表单实例的单独类中。如果各个State 类与Form 的类分开,State 类就不能访问Form 的组件。我觉得这让我有两种选择之一:

  1. 将表单的组件公开
  2. 使 State 类成为 Form 的内部类

我觉得选项(1)是不好的形式,但我觉得选项(2)在某种程度上违反了状态模式的精神。我的另一个想法是使用选项(2)但使用部分类实现,但是我仍然觉得它违反了状态模式的精神。

我对这两种选择的感受是不公平的,还是我什至没有想到其他选择?

0 投票
8 回答
22343 浏览

oop - 如何正确使用状态模式?

在我的编程经验中,我遇到了一些状态模式的实现,并且做了一些。我已经看到它们用于各种场景(主要是 UI 和解析)。问题在于,所有这些在快速开发的压力下都变成了难以维护和理解的代码块。我正在考虑重构其中之一,但我在网上找不到好的资源。网上有很多简单的状态模式示例,但我需要一些更深入的资源。

所以我正在寻找:

  • 实现状态模式时的常见陷阱示例以及如何避免它们,
  • 正确完成状态模式的真实示例(例如在某些开源项目/框架中)
  • 也欢迎使用状态模式的个人经验

感谢您的时间

0 投票
1 回答
289 浏览

design-patterns - 状态模式是否准确地代表了方法?

我从State 模式的典型实现中收集到的是:

问题: 表示一个对象O,其行为根据其当前状态而改变。
解决方案:
1. 让对象O中的另一个对象S表示状态 2. 对象S将调用O的相应操作 3. 对象S将决定对象O的下一个状态

我关心的主要是#3. 状态转换表基本上分布在所有状态中。我已经看到这些解决方案变得非常繁琐,难以快速管理。这些状态不是指标,而是包含太多关于状态机的信息。
即使#2困扰我,我想这是相当合理的(摩尔机器。)我看到的唯一问题出现在错误修复/调试期间:代码导航/理解变得困难,直到将所有状态映射提交到内存。

下面的实现会更精确吗?
将状态表示为枚举,对象根据枚举所持有的值决定动作。它们位于一个表(δ,状态转换函数)中,该state transitions表是当前状态到下一个状态的映射。这state transition table也包含要执行的操作(Mealy machine

0 投票
1 回答
3286 浏览

uml - 具有不同保护条件的状态转换

在状态模式中这是如何建模的?

当当前状态为 A 时,触发器 X 上的状态 A 到状态 B 和条件 C1

当当前状态为 A 时,触发器 X 和条件 C2 上的状态 A 到状态 C

这通常是如何完成的?我有很多可能需要实施的警戒条件。

0 投票
3 回答
362 浏览

c# - 使用状态模式时业务逻辑在哪里?

它是包装器对象吗?还是状态对象本身?

我可以看看一些例子吗?

0 投票
2 回答
1328 浏览

design-patterns - 为什么是代理模式是结构模式,为什么是状态模式是行为模式?

为什么代理模式是结构模式,为什么状态模式是行为模式。确定新模式应被视为结构性还是行为性的标准是什么?

0 投票
1 回答
2013 浏览

c# - 状态设计模式用户界面

我正在学习状态设计模式。我正在使用 C# ASP.Net(不确定语言是否相关)。

基本上,我的对象具有状态 A、B 和 C,以及在不同状态之间移动它的操作ActionAToBActionBtoAActionAtoC.

我想要做的是将这个对象绑定到屏幕上,并让按钮触发这些操作,但问题是:我如何只显示与对象所在状态相关的按钮,并在状态时显示/隐藏按钮变化?

我正在寻找与状态模式相匹配的优雅解决方案,或者任何可以使 UI 易于维护的建议。

0 投票
2 回答
400 浏览

java - java.util.Iterator 的实现是否使用状态模式?

我只是在寻找一个合理的答案

正在进入状态设计模式

编辑

请参考以下链接

Java核心库中的GoF设计模式示例