Как не нарушать принцип открытия / закрытия, когда реализация интерфейса зависит от выбора пользователя - PullRequest
0 голосов
/ 20 января 2020

Я немного растерялся. Я пытался создать простое веб-приложение, когда пользователь выбирает какой-либо тип клиента, и операции, выполняемые в службах, будут зависеть от этого выбора. Я создаю интерфейс, который реализует каждый мой клиент, но как я могу решить, какая реализация клиента? Если я буду использовать конструкцию if / else, это нарушит принцип открытия / закрытия (это правда?), Потому что, когда я хотел бы добавить нового клиента, мне нужно изменить свой код, добавив новый else. Как я могу сделать это правильно?

 @RestController
public class SomeRest {


    @Autowired
    private SomeService someService;


    @GetMapping("/test")
    private Set<String> test(@RequestBody ClientType type) {
        return someService.method(type);
    }
}



@Service
public class SomeService {

    private SomeInterface someInterface;

    public Set<String> method(ClientType type) {
        if (type.equals(ClientType.TYPE_ONE)) {
            someInterface = new ClientOne();
            return someInterface.operation();
        } else if (type.equals(ClientType.TYPE_TWO)) {
            someInterface = new ClientTwo();
            return someInterface.operation();
        }
        return null;
    }
}
...