设计模式以切换一组功能的状态

时间:2012-07-13 16:06:13

标签: java design-patterns

我在一个类中有一系列实例函数。还有一个布尔实例变量,用于指定对象状态。几乎所有实例函数都依赖于此布尔状态。他们的身体看起来像

int f() {

   if (state) {
      //do stuff
   }
   else {
      // do other stuff
   }
}

除此之外,某些功能由州交换。因此,如果state为true,那么当用户调用f()时,它实际上就会运行。但是当状态为false时,那么当用户调用f()时会发生什么是antiF()运行。

所以有些函数里面有开关,有些函数完全交换。

如果我用C ++这样做,我可能会使用函数指针。我如何用Java做到这一点?战略模式?

1 个答案:

答案 0 :(得分:6)

看起来你想要state pattern。您可以将这些函数拉入状态接口,并为每个状态分别实现,而不是让每个函数检查状态:

public interface State {
  void f();
  void g();
  void h();
}

public class StateA : State {
  public void f() { do something; }
  ...
}

public class StateB : State {
  public void f() { do something else; }
  ...
}

然后,您将维护一个特定的State实例而不是布尔变量:

State currentState = new StateA();
...
currentState = new StateB();