Какое решение лучше всего зависит от того, как вы определяете выбор в вашем пользовательском интерфейсе.
Самый простой способ определить возможные варианты - это перечисление. Если вы идете по этому маршруту, я бы предложил использовать EnumMap
для сопоставления типа для действия или (при условии, что действия изменяются или должны быть созданы для каждого запроса) фабрикой действий.
Например:
EnumMap<Type, Class<Action>> typeToActionMap = new EnumMap<>();
typeToActionMap.put(Type.Large, LargeAction.class);
typeToActionMap.put(Type.Medium, MediumAction.class);
typeToActionMap.put(Type.Small, SmallAction.class);
Выше я использую класс действия как своего рода фабрику. Если действия могут быть одиночными, вы можете сделать значение карты действием. Как @dhke предложил, вы можете использовать гуавы-х ClassToInstanceMap
к для этого отображения:
ClassToInstanceMap<Action> actionTypeToAction = MutableClassToInstanceMap.create();
typeToActionMap.putInstance(LargeAction.class, new LargeAction(...));
typeToActionMap.putInstance(MediumAction.class, new MediumAction(...));
Если у вас уже есть уникальный тип для каждого выбора то вам просто нужно найти способ сделать отображение. Простой способ, чтобы ваши типы все реализовать общий интерфейс:
public interface ActionProvider {
Class<? extends Action> getActionClass();
Создайте интерфейс для всех этих – SomeJavaGuy
Да. Это как мой текущий дизайн. Но как мне избежать экземпляра позже? –
Является ли POJO чистым объектом данных или является частью бизнес-логики? Или сформулированы иначе: Можете ли вы сделать POJO в объект команды и сделать с ним? – dhke