Контроллер получает список из нескольких фруктов от пользователя. Контролеру нужно делать сок из каждого из этих фруктов. Один соковыжималка может сделать сок из апельсина и грейпфрута; другой Соковыжималка знает, чтобы сделать сок из яблока, банана и папайи; и так далее. Каждый Соковыжиматель может принимать несколько фруктов за один раз, он будет обрабатывать только фрукты, на которые он способен, и игнорировать другие фрукты без изменений. Просьба предложить подходящий дизайн для этой проблемы. Я рассматриваю следующие варианты:Дилемма выбора шаблона дизайна
- Контроллер звонков
MasterJuicer.juice(List<Fruit> fruits)
.MasterJuicer
в свою очередь вызываетCitrusJuicer.juice(fruits)
иPulpyJuicer.juice(fruits)
. - Цепь ответственности не кажется правильной. Заказ, в котором соковыжималки называются, не имеет значения.
- Фабрика? Контроллер звонит
JuicerFactory.getJuicers(List<Fruit> fruits)
, чтобы получитьList<Juicer>
. Затем контроллер перебирается через каждый соковыжималка и звонитJuicer.juice(fruits)
. Обычна ли фабрика возвращать список экземпляров? - Поддержание реестра фруктов против соковыжималки в
Map
? Контроллер вызываетFruitsRegistry.getJuicer(Fruit fruit)
для каждого фрукта, затем называет каждый соковыжималку в цикле.
Очень привлекательный ответ. Я собираюсь пережевывать эти идеи на некоторое время и посмотреть, как они приносят пользу моему реальному бизнес-сценарию. И спасибо за ссылки на инструменты сканирования классов! – Somu