我正在开发一个图形程序,让您连接或托管服务器。它有一个输入IP的字段。现在有2个州:Hosting
& Connecting
。托管IP字段时应禁用。为此,我将以下内容添加到HostConnectChanged
事件:
if(state == Hosting)
{
ipField.enable(false);
}
else if(state == Connecting)
{
ipField.enable(true);
}
在我看来,这是以简单方式处理gui状态的合理方式。问题是为程序添加另一种类型的状态。它可以连接/托管或断开连接。当它连接时,也应该禁用IP字段。
if(state == Hosting)
{
ipField.enable(false);
}
else if(state == Connecting)
{
if(state2 == Idle)
ipField.enable(true);
}
if(state2 == Running)
{
ipField.enable(false);
}
else if(state2 == Idle)
{
if(state == Connecting)
ipField.enable(true);
}
我想你知道这是怎么回事。大型项目如何处理多个州?难道这不是gui编程中一个众所周知的问题吗?
答案 0 :(得分:0)
较大的程序总是大量使用separation of concerns,并且尽可能将状态保存在相关对象的本地。处理此类状态依赖行为的一个常见问题是state design pattern。
如果您的两个州是独立的:
理想情况下,几个不同类的对象将使用它们自己的状态机。例如,表单上的某些控件可能取决于连接状态。其他一些控件可能取决于表单中的修改状态。然后,组件的全局状态(例如表格)简单地从其各部分的状态的组合中出现(例如,连接/修改,或连接/未改变)。
如果你的状态是依赖的:
但是,在您的情况下,这两个州是相关的,因为Running
和Connecting
似乎不相容。最简单的方法肯定是使用复合状态机,其中有效状态是所有允许的组合。然后使用具有复合状态的状态模式。