需要实例化多个PauseTransition不同机器的实例,例如 resetCredentialsMachineOne
、resetCredentialsMachineTwo
等。对于每台机器,都会有一个重复的 PauseTransition
实例创建代码,如下所示。 expireCredentialsForMachine()
重置 Credentials
对象,以便用户被迫重新登录:
resetCredentialsMachineOne = new PauseTransition(Duration.minutes(2));
resetCredentialsMachineOne.setOnFinished(e -> expireCredentialsForMachine(machineOne));
resetCredentialsMachineTwo = new PauseTransition(Duration.minutes(2));
resetCredentialsMachineTwo.setOnFinished(e -> expireCredentialsForMachine(machineTwo));
.....
当用户登录时,每个 PauseTransition
实例都会有以下条件
代码:
if(machineOneLogsIn)
resetCredentialsMachineOne.playFromStart();
else if(machineTwoLogsIn)
resetCredentialsMachineTwo.playFromStart();
...
寻找一种以更好的方式设计代码的方法,而不是使用一堆 if 语句。这看起来像是多态性或工厂用例,但想听听其他人对此有什么意见
最佳答案
看看下面基于 SOLID 原则的类(class)。
- 它对扩展开放,但对修改关闭,
- 将转换逻辑抽象到管理器中
- 解耦机器对象和转换逻辑
public class MachinePauseTransitionManager {
private static final Map<Machine, PauseTransition> MACHINE_PAUSE_TRANSITIONS = new HashMap<> ();
public void createPauseTransition(Machine machine) {
PauseTransition resetCredentialsMachine = new PauseTransition(Duration.minutes(2));
resetCredentialsMachine.setOnFinished(e -> expireCredentialsForMachine(machine));
MACHINE_PAUSE_TRANSITIONS.put(machine, resetCredentialsMachine)
}
public void login(Machine machine) {
MACHINE_PAUSE_TRANSITIONS.get(machine).playFromStart();
}
}
使用方法:
MachinePauseTransitionManager manager = new MachinePauseTransitionManager();
Machine machineOne = ..
Machine machineTwo = ..
// creating pause transitions
manager.createPauseTransition(machineOne);
manager.createPauseTransition(machineTwo);
.
.
.
// when perticular machine logs in
manager.login(machineOne);
manager.login(machineTwo);
关于java - 替换条件 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49186407/