2

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

int f() {

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

除此之外,状态还交换了一些功能。因此,如果状态为真,那么当用户调用 f() 时,它实际上会运行。但是当状态为假时,当用户调用 f() 时,会发生 antiF() 运行。

所以有些功能内部有开关,有些功能完全交换。

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

4

1 回答 1

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();
于 2012-07-13T16:23:10.327 回答