1
这有点棘手。我在我的应用程序中使用状态模式来管理状态。我想在应用程序中拥有每个状态的单个实例,但我不想让每个状态类都作为单例类。我想到的另一种方法是编写一个StateLocator类。 StateLocator可以是单例,它可以保存所有状态的实例。请指导我判断StateLocator是否是一个好的解决方案,或者是否有其他解决方案,我仍然只能拥有一个状态实例,并且可能会避免单身人士。状态设计模式,但避免单身人士
任何帮助表示赞赏。例如
public interface TestState {
public void onTest();
public void onApprove()
}
class StateA implements TestState {
public void onTest() {
}
public void onApprove() {
}
}
class StateB implements TestState {
public void onTest() {
}
public void onApprove() {
}
}
class StateLocator {
private StateA mStateA;
private StateB mStateB;
StateLocator() {
mStateA = new StateA();
mStateB = new StateB();
}
public TestState getState(int stateType) {
if(stateType == 1) {
return mStateA;
} else {
return mStateB;
}
}
}
我在这里看到的唯一不好的部分是StateLocator必须知道所有可能的状态。 StateLocator能够以任何方式了解可能的状态列表本身吗? – cppdev 2012-01-18 03:17:01
如果你想让你的状态被发现,你可以在你有发布/订阅系统的地方使用观察者模式(如事件模型)。无论如何,这仍然需要所有状态被发现和激活。您可以使用反射来发现这些内容,并将其注册到发布/订阅模型。这可能是过度的。 – Dessus 2012-01-18 03:22:38
注册表不一定必须知道所有的状态。它可能有一个按键的独特国家集合的抽象概念。所以.... locator.RegisterState(stateA,1);或者 – 2012-01-18 03:35:13