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