姬長信(Redy)

java – 用多态替换switch-case


我知道已经有类似的问题,但看着它们我仍然对如何设计我的代码有一些疑问.我有一个允许用户注册/登录/更新/删除的服务.问题是User是一个抽象类型,它包含数据typeOfUser,基于该类型应该调用实际的注册/更新/删除方法,现在我在switch-case块中执行此操作.我想用更好的设计取代它.

UserController.java

public class UserController {

    public UserDto register(UserDto user) {
        switch(user.getTypeOfUser()) {
        case DRIVER: return driverService.register(user);
        case CUSTOMER: return customerService.register(user);
        // ...
        }
    } 

    public UserDto update(UserDto user) {
        switch(user.getTypeOfUser) {
        case DRIVER: return driverService.update((DriverDto) user);
        case CUSTOMER: return customerService.update((CustomerDto) user);
        // ...
        }
    }

    public UserDto login(long userId) {
        loginService.login(userId);

        UserBO user = userService.readById(userId);

        switch(user.getTypeOfUser) {
        case DRIVER: return DriverDto.fromBO((DriverBO) user);
        case CUSTOMER: return CustomerDto.fromBO((CustomerBO) user);
        // ...
        }
    }

    // ...
}

我知道可以使用像访问者模式这样的东西,但我真的需要在Enum本身添加注册/登录/更新/删除方法吗?我真的不知道如何做到这一点,任何帮助表示赞赏.