Java 切换一组函数状态的设计模式
我在一个类中有一系列实例函数。还有一个布尔实例变量指定对象状态。几乎所有的实例函数都依赖于这种布尔状态。他们的身体看起来像Java 切换一组函数状态的设计模式,java,design-patterns,Java,Design Patterns,我在一个类中有一系列实例函数。还有一个布尔实例变量指定对象状态。几乎所有的实例函数都依赖于这种布尔状态。他们的身体看起来像 int f() { if (state) { //do stuff } else { // do other stuff } } 除此之外,一些功能由状态交换。所以,若state为true,那个么当用户调用f()时,它实际上是运行的。但当state为false时,当用户调用f()时,发生的是运行antiF() 所以有些函数
int f() {
if (state) {
//do stuff
}
else {
// do other stuff
}
}
除此之外,一些功能由状态交换。所以,若state为true,那个么当用户调用f()时,它实际上是运行的。但当state为false时,当用户调用f()时,发生的是运行antiF()
所以有些函数里面有开关,有些函数完全交换
如果我用C++做这件事,我可能会使用函数指针。我将如何使用Java实现这一点?战略模式?看起来你想要的是。不是让每个函数检查状态,而是将这些函数拉入状态接口,并为每个状态提供单独的实现:
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 currentState = new StateA();
...
currentState = new StateB();
假设StateB.g()与StateA.f()相同。有没有比只写
StateA.f(参数)更简单的解决方案?@problemofficer:在这种情况下,我会将所有单独的功能片段拉到一个单独的类中,只需从状态
对象调用各种函数。例如,StateB.g()
和StateA.f()
都可以调用Foo.bar()
。