Design patterns 状态设计模式,但避免单例

Design patterns 状态设计模式,但避免单例,design-patterns,singleton,state-pattern,Design Patterns,Singleton,State Pattern,这有点棘手。我在应用程序中使用状态模式来管理状态。我希望在我的应用程序中每个状态都有一个实例,但我不希望每个状态类都成为一个单例类。我想到的另一种方法是编写StateLocator类。StateLocator可以是单例的,它可以保存所有状态的实例。请指导我StateLocator看起来是一个好的解决方案,还是有其他解决方案,我仍然能够只有一个状态实例,并且可能避免单例 感谢您的帮助。e、 g public interface TestState { public void onTest

这有点棘手。我在应用程序中使用状态模式来管理状态。我希望在我的应用程序中每个状态都有一个实例,但我不希望每个状态类都成为一个单例类。我想到的另一种方法是编写StateLocator类。StateLocator可以是单例的,它可以保存所有状态的实例。请指导我StateLocator看起来是一个好的解决方案,还是有其他解决方案,我仍然能够只有一个状态实例,并且可能避免单例

感谢您的帮助。e、 g

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。