问题标签 [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.
c# - C# 状态模式和事件
在 C# 中,事件只能由所属类通过受保护的虚拟方法(如 OnClick、OnExit 等)触发……我正在尝试为我的一些复杂类实现 GOF 状态模式。到目前为止一切都很好,除了我找不到从我的状态类中触发拥有类的事件的方法。
例如,我的按钮有两种状态(向上和向下),DownState 类将检查用户输入,并在必要时触发按钮的 Click 事件。
我怎样才能做到这一点?
java - 实现状态模式是简单国际象棋游戏的良好设计选择吗?
我正在尝试编写两个用户玩的离线无 AI 无 GUI 同步命令行国际象棋游戏(或一个用户同时玩白色和黑色)。这意味着只有 1 个线程。
国际象棋游戏包括特殊运动{捕获,过路,晋级,易位,将死,相持}
用户通过说明开始位置和结束位置与游戏进行交互。例如 e1 g1。就是这样,一行。
我试图充分利用面向对象设计的特权。但只是为了这个要求。实施状态模式值得吗?由于用户只输入命令,游戏不应要求用户在其后做出任何其他决定。
编辑:我很抱歉没有说清楚。我感到困惑的是,是在游戏控制级别实现状态,如下图:还是游戏块级别:
.net - 对状态机进行单元测试
我对C#
他们的单元测试设施不熟悉。state
我使用来自的模式编写了一个状态机GoF
如何正确测试这样的状态机?这个具体的状态机只是一个示例实现。正确的实现有更多的状态和条件进行转换。
oop - OO 编程问题 - 状态设计模式
我花了最后一天试图找出最适合我的特定场景的模式,我一直在状态模式和策略模式之间折腾。当我在 Internet 上阅读示例时,它非常有意义……但尝试将其实际应用于您自己的问题是另一种技能。我将描述我的场景和我面临的问题,希望有人能指出我正确的方向。
问题:我有一个具有不同同步状态的基础对象:即最新、旧、从未发布、未发布等。现在,根据对象所处的状态,行为会有所不同,例如,您无法获取基础对象的最新版本从未发表过。在这一点上,状态设计模式似乎最适合......所以我已经实现了它,现在每个状态都有 CanGetLatestVersion、GetLatestVersion、CanPublish、Publish 等方法。
在这一点上,这一切似乎都很好。但是假设您有 10 个从基类派生的不同子对象......我的解决方案被打破了,因为当为每个状态执行“发布”方法时,它需要子对象中的属性才能实际执行操作,但每个状态只有对基础对象的引用。我刚刚花了一些时间创建一个示例项目来说明我在 C# 中的问题。
然后我考虑为每个子对象实现状态......这会起作用,但我需要创建 50 个类,即(10 个子对象 x 5 个不同的状态),这看起来绝对是疯狂的......因此我在这里!
任何帮助将不胜感激。如果令人困惑,请告诉我,以便我澄清!
干杯
design-patterns - 使用示例的策略模式和状态模式之间的区别
尽管关于同一个主题有很多问题,但没有一个能完全消除我的困惑。所以我试图用这两种模式举一个例子及其解决方案。
请告诉我我做对了还是做错了什么。
课程:
- BeforeCondition : 定义电压等级、燃料量、转子皮带状况
- Baker : 烘烤饼干的机器
- LowSpeedBaker、HighSpeedBaker、MediumSpeedBaker:Baker 的各种实现或状态。
- BakerStateFactory:它接受 BeforeCondtion 并返回 Baker 的状态之一。
实施1:
客户端创建BeforeCondition并从BakerStateFactory获取适当的面包师。现在它调用面包师的 bake()。
实施2:
客户不关心机器如何工作。它只是将 BeforeCondition 传递给 Baker 机器。Baker 机器本身根据 BeforeCondition 决定其状态。
结论
第一个实现让客户端决定状态或必须注入什么实现。机器是否可以在该条件下实际工作并不关心。这是策略模式。
在第二种实现中,机器可以自行决定其状态并相应地工作。如果需要,它还可以在进程之间自由更改其状态。这是状态模式。
java - 状态设计模式实现
我正在尝试将状态设计模式应用于我正在构建的即时通讯程序。该程序建立在现有的即时通讯 API 之上。我本质上是在创建一个包装类来简化发送消息的过程。(包装类将被几个自动化脚本用于在某些事件发生时触发消息。)
这是我到目前为止所拥有的:
- 将
Messenger
用作客户端接口并保存对当前状态的引用的类。 AbstractMessengerState
所有具体状态都将从中继承的类。- 代表各种状态的几个具体
State
类(例如 SessionStarted、LoggedIn、LoggedOut 等)
我遇到的问题是在哪里存储状态数据。也就是说,哪个类应该存储我需要执行信使程序的业务逻辑的字段。例如,我有一个 Map 数据结构,它将用户 ID(字符串)映射到底层 API 使用的对象。我有一个 Session 对象,用于访问各种消息传递组件以及登录和退出消息传递服务器。这些对象需要在所有子类之间共享。
如果我将这些数据存储在基类中,那么每次实例化新状态时都会复制数据。有没有办法确保子类可以访问基类中的数据而不复制字段?
更新
好的,在阅读了相关文章后,我将尝试将所有内容存储在 Context (Messenger) 类中,看看情况如何。
design-patterns - State、IntegerState、ExplicitIntegerState 和 ImplicitIntegerState 有什么区别?
我对状态模式很熟悉,但最近我听说了标题中提到的其他三种设计模式。我不知道这三种模式与正常状态模式的区别,谷歌也没有帮助!
更新:我最初在下图中找到了这些模式(标题:设计模式之间的关系),但没有任何关于它们的额外信息:
c# - 使用状态和工厂设计模式管理状态和验证规则
在我最近的项目中,我有一个Order
类,它的属性将由不同的用户逐步完成,每个用户将部分完成的订单提交给下一个用户,所以我假设每个人每次Order
都有一个Status
,例如当一个Order
创建时,其Status
将是NewStatus
,当为其指定 BOM(物料清单)时,其Status
将是BOMAttachedStatus
,当它计划生产时,其Status
将是PlannedStatus
,等等。
我还需要在每个步骤中应用一些验证规则Order
,例如用户必须在创建Order
( NewState
) 时指定客户名称,或者用户必须在Order
计划 ( PlannedStatus
) 时设置 PlanningDate,...
所以,我决定使用状态设计模式来管理状态,并使用工厂设计模式来检查验证:
当我想保存我的currentOrder
,我打电话StateFactory.CreateOrderStatus(currentOrder)
来设置它Status
:
这种方法对我的情况是否正确?有没有更好的解决方案?
asp.net-mvc - 实体框架的状态模式
我有一个模型Enquiry
,它可以处于两种状态之一(还有更多,但出于此目的,我只比较两个):New
和Closed
。查询所处的状态取决于用户能够对查询进行什么操作。例如,无法删除已关闭的查询,而可以删除新的查询等等(基本示例)。
我想坚持这一点,Entity Framework
但不知道如何。下面是我的代码。
询问:
查询状态:
新查询状态:
关闭查询状态:
所以我的问题是,我不确定如何将这些不同的状态存储在数据库中,我是否应该int
在每个状态上使用某种字段并Enquiry
通过 FK 将它们映射到?另外,我是否也需要将字段映射CanAddLines
到CanDelete
数据库?看到逻辑包含在状态中,对于状态模式范式来说是全新的
design-patterns - 状态模式:如果每个状态只允许执行 1 或 2 个动作,那么使用它是否有意义?
1) 极端情况:我有 10 个状态和 10 个可能的动作要执行(导致状态转换)。但是这些动作中的每一个都只允许在它们的特定状态下进行。状态 1 只能执行动作 1,状态 2 动作 2,依此类推(仅向前的简单图)
2)相反的情况:我有 10 个状态和 10 个可能的动作来执行,每个状态都允许它们中的每一个。其中一些在几个州中的行为完全相同,一些在每个州的行为完全相同,而另一些在每个州的工作方式不同(如策略)
我提出了两种极端情况。我想对该怎么做发表意见。组合模式也会很好。