java - 替换条件 If 语句

标签 java if-statement javafx polymorphism factory

需要实例化多个PauseTransition不同机器的实例,例如 resetCredentialsMachineOneresetCredentialsMachineTwo 等。对于每台机器,都会有一个重复的 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/

相关文章:

python - 检查字符串是否包含一个值或另一个值,语法错误?

c++ - 是否按照编写的顺序测试 ifs 是 if-else...if-else...if-else block ?

java - 没有更多便捷的Java/Java FX 11应用程序了吗?

java - 如何检查选项卡是否已在 JavaFX 的 TabPane 中打开

java - ObjectInputStream 无效流 header : 00000000

java.util.Scanner 在读取大文件时出现故障

java - 搜索数据列表中的 View 回收 View Android

java - 自定义序列化器和 jackson 模式

javascript - 基于innherHTML点击事件触发不同的功能

java - 如何在 FX 线程上放置某些内容?