我有这样的枚举:
public enum Configuration {
XML(1),
XSLT(10),
TXT(100),
HTML(2),
DB(20);
private final int id;
private Configuration(int id) {
this.id = id;
}
public int getId() { return id; }
}
Run Code Online (Sandbox Code Playgroud)
有时我需要检查枚举中有多少个字段.什么是最好的解决方案?我应该使用方法"values().length"吗?或许,我必须在枚举中创建常量字段,如下所示:
public enum Configuration {
XML(1),
XSLT(10),
TXT(100),
HTML(2),
DB(20);
private final int id;
private Configuration(int id) {
this.id = id;
}
public int getId() { return id; }
public static final int Size = 5;
}
Run Code Online (Sandbox Code Playgroud)
什么是最快,更优雅的解决方案?
我想知道状态机是否只是工作中的状态模式,或者这两者之间是否存在差异?
我发现这篇文章的标题是"状态设计模式与状态机",但在一天结束时他只说状态模式使状态机过时但后来没有描述状态机究竟是什么状态机与实施国家格局.
是否存在设计模式(如访问者,策略,状态等)或其他一些设计原则,以帮助设计一个良好的解决方案来模拟实体的状态流,例如任务实体.
任务以新状态启动,然后进入BeingHandled状态,然后进入WaitingForApproval,然后它可以移动到Finished或NotApproved,这实际上是回到了 带有其他信息的BeingHandled,说它是从WaitingForApproval返回的.
所以一般来说我们有一些一般的流程,然后我们可以在其中有一些内部流程.
谢谢,
ashilon
我一直在阅读状态机,因为它可能需要用于我的下一个项目.我在网上找到的大多数例子都显示了如何从StateA转到StateB.但是如果你的下一个想要的状态不是一个相邻的状态呢?是否有任何共同的模式/实践来实现这一目标?理想情况下是Java,但我也可以阅读其他编程语言.
# Example States
WakeUp->Get Dressed->Get Car Keys->Get in Car->Drive to Work->Work
Current State: Get in Car
Run Code Online (Sandbox Code Playgroud)
要解决的问题
# Scenario 1: Desired State == Work
Forgot car keys, so you have to return to previous state and then move forward in states again.
# Scenario 2: Desired State == Work
Have car keys, so move forward in states to get to Desired State.
Run Code Online (Sandbox Code Playgroud)
状态机很可能不会优雅地解决这个问题,我只需要手工制作逻辑,我不介意,但我想我会遵循一个共同的设计模式来帮助其他人理解它.
从上面的例子中,我不需要担心"内部"状态,这对于我正在处理的项目也是如此; 以防万一在可能的解决方案中有所作为.