ВопросSeniorСБК ПАРУС30 просмотров

В чём основная проблема выбранной структуры решения - Жесткая инициализация финал-полей - Структура не гарантирует уникальности сервисов в кеше - Поиск сервисов усложняет тестирование - Нет шаблона использования. Стратегия гибкости. - Сервис-локатор затрудняет отладку Код: public class CarMaintenanceReminder { private final ServiceLocator serviceLocator; private final ReminderCache reminderCache; public CarMaintenanceReminder() { this.serviceLocator = new ServiceLocator(); this.reminderCache = new ReminderCache(); } public Reminder getOilChangeReminder(String carId) { Reminder reminder = reminderCache.getReminder(carId); if (reminder == null) { reminder = serviceLocator.getService(ReminderService.class).createOilChangeReminder(carId); reminderCache.addReminder(reminder); } return reminder; } } class ServiceLocator { public <T> T getService(Class<T> serviceClass) { return serviceClass.cast(generateService(serviceClass)); } private Object generateService(Class<?> serviceClass) { if (serviceClass == ReminderService.class) { return new ReminderService(); } return null; } } class Reminder { private final String carId; public Reminder(String carId) { this.carId = carId; } } class ReminderService { public Reminder createOilChangeReminder(String carId) { return new Reminder(carId); } } class ReminderCache { private final Map<String, Reminder> cache; public ReminderCache() { this.cache = new HashMap<>(); } public Reminder getReminder(String carId) { return cache.get(carId); } public void addReminder(Reminder reminder) { cache.put(reminder.getCarId(), reminder); } }