Java永久交换机

时间:2016-11-24 14:20:04

标签: java oop polymorphism

我有2个状态的类,它们由属性的值定义(例如,启动可以为false)

当我从一个实例调用一个方法时,我希望根据状态获得不同的行为。 我目前正在使用if语句,每次调用该方法时都会查询状态,但我认为可能有更快的方法可以执行此操作(类似多态?)

有没有一种优雅的方式来实现这个?我曾经想过在行为发生变化时有两个子类继承和转换它们但也许有更好的东西

下面的一个虚拟示例(我的实际问题更耗时,因此需要改进)

public class StateChangingClass {
private boolean started;

public StateChangingClass() {
    started = false;
}

public void start(){started = true;}
public void end(){started = false;}

public boolean checkCondition(double time) {
    if (started) {
        if (time>0) {return true;}
        else {return false;}
        }

    else {return false;}
    }

}

1 个答案:

答案 0 :(得分:2)

在这个例子中它太过分了,但也许你会想到如何在你的情况下使用它。我添加了一个界面' ConditionChecker'它有两个实现。方法开始'并且'结束'只需设置所需的ConditionChecker。

public class StateChangingClass {

  private ConditionChecker conditionChecker;

  public StateChangingClass() {
    conditionChecker = StartedChecker.INSTANCE;
  }

  public void start() {
    conditionChecker = StartedChecker.INSTANCE;
  }

  public void end() {
    conditionChecker = EndChecker.INSTANCE;
  }

  public boolean checkCondition(double time) {
    return conditionChecker.check(time);
  }

  interface ConditionChecker {

    boolean check(double time);
  }

  static class StartedChecker implements ConditionChecker {

    public static final ConditionChecker INSTANCE = new StartedChecker();

    @Override
    public boolean check(double time) {
      return (time > 0);
    }
  }

  static class EndChecker implements ConditionChecker {

    public static final ConditionChecker INSTANCE = new EndChecker();

    @Override
    public boolean check(double time) {
      return false;
    }
  }
}