Design patterns 状态设计模式,但避免单例
这有点棘手。我在应用程序中使用状态模式来管理状态。我希望在我的应用程序中每个状态都有一个实例,但我不希望每个状态类都成为一个单例类。我想到的另一种方法是编写StateLocator类。StateLocator可以是单例的,它可以保存所有状态的实例。请指导我StateLocator看起来是一个好的解决方案,还是有其他解决方案,我仍然能够只有一个状态实例,并且可能避免单例 感谢您的帮助。e、 gDesign patterns 状态设计模式,但避免单例,design-patterns,singleton,state-pattern,Design Patterns,Singleton,State Pattern,这有点棘手。我在应用程序中使用状态模式来管理状态。我希望在我的应用程序中每个状态都有一个实例,但我不希望每个状态类都成为一个单例类。我想到的另一种方法是编写StateLocator类。StateLocator可以是单例的,它可以保存所有状态的实例。请指导我StateLocator看起来是一个好的解决方案,还是有其他解决方案,我仍然能够只有一个状态实例,并且可能避免单例 感谢您的帮助。e、 g public interface TestState { public void onTest
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必须知道所有可能的状态。StateLocator有什么方法可以自己学习可能状态的列表吗?如果您希望发现您的状态,您可以使用一个观察者模式,其中有一个发布/订阅系统(如事件模型)。这仍然需要发现并激活所有状态。您可以使用反射来发现它们,并将它们注册到发布/订阅模型中。这可能有点过分了。注册中心不必知道所有的州。它可能有一个抽象的概念,即按键的唯一状态集合。所以定位器注册表状态(stateA,1);或者使用StateBuilder来创建States的StateRegistry Hanks Keith。RegisterState看起来是一个很好的解决方案。看起来我需要在定位器中保存一个HashMap。