Я немного растерялся. Я пытался создать простое веб-приложение, когда пользователь выбирает какой-либо тип клиента, и операции, выполняемые в службах, будут зависеть от этого выбора. Я создаю интерфейс, который реализует каждый мой клиент, но как я могу решить, какая реализация клиента? Если я буду использовать конструкцию 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;
}
}