Java永久交换机

Java永久交换机,java,oop,polymorphism,Java,Oop,Polymorphism,我的类有两个状态,它们由属性的值定义(例如,start可以是true,也可以是false) 当我从一个实例调用一个方法时,我希望根据状态得到不同的行为。 我目前正在使用一个if语句,它将在每次调用该方法时查询状态,但我认为可能有一种更快的方法来实现这一点(比如多态性?) 有没有一种优雅的方法来实现这一点?我曾想过在行为发生变化时使用两个子类来继承和转换它们,但也许有更好的方法 下面是一个虚构的例子(我的实际问题更耗时,因此需要改进) }在这个例子中,它太多了,但也许你知道如何在你的情况下使用它。

我的类有两个状态,它们由属性的值定义(例如,start可以是true,也可以是false)

当我从一个实例调用一个方法时,我希望根据状态得到不同的行为。
我目前正在使用一个if语句,它将在每次调用该方法时查询状态,但我认为可能有一种更快的方法来实现这一点(比如多态性?)

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

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


}

在这个例子中,它太多了,但也许你知道如何在你的情况下使用它。我添加了一个接口“ConditionChecker”,它有两个实现。方法“start”和“end”只是设置了所需的条件检查器

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;
    }
  }
}

在这个例子中,这是太多了,但也许你知道如何在你的情况下使用它。我添加了一个接口“ConditionChecker”,它有两个实现。方法“start”和“end”只是设置了所需的条件检查器

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;
    }
  }
}

您的示例代码过于简单化,您的实际问题是什么,请在代码中显示问题,可能会添加注释,说明什么操作比较昂贵,以及您希望在哪里做一些不同的事情。“我认为可能有更快的方法来做这件事”我强烈怀疑这会很慢<代码>开始返回(&T)时间>0的计算非常简单。我觉得如果不是实际的代码,但是对实际代码进行适当的模拟会更好。这也可以用三元结构来解决。研究设计模式。工厂设计模式似乎最适合这种情况。我肯定说明了设计模式,您的示例代码过于简单化,您的实际问题是什么,在代码中显示问题,可能会添加注释什么操作比较昂贵,以及您希望在哪里做些不同的事情。“我认为可能有一种更快的方法可以做到这一点”我强烈怀疑这将是缓慢的<代码>开始返回(&T)时间>0的计算非常简单。我觉得如果不是实际的代码,但是对实际代码进行适当的模拟会更好。这也可以用三元结构来解决。研究设计模式。工厂设计模式似乎最适合这种情况。Imo明确说明了设计模式,