Kontroler otrzymuje listę kilku owoców od użytkownika. Kontroler musi wykonać sok z każdego z tych owoców. Jeden sokowirówka może wytwarzać sok z pomarańczy i grejpfruta; inny sokowiec wie, jak zrobić sok z jabłka, banana i papai; i tak dalej. Każdy sokowirówka może przyjmować wiele owoców za jednym zamachem, przetwarza tylko owoce, które są w stanie i ignoruje inne owoce nietknięte. Uprzejmie prosimy o zaproponowanie odpowiedniego projektu tego problemu. Rozważam następujące opcje:Dylemat wyboru szablonu projektu
- Połączenia kontrolerów
MasterJuicer.juice(List<Fruit> fruits)
.MasterJuicer
z kolei wywołujeCitrusJuicer.juice(fruits)
iPulpyJuicer.juice(fruits)
. - Łańcuch odpowiedzialności nie wydaje się właściwy. Kolejność, w której przywoływane są sokowirówki, nie ma znaczenia.
- Fabryka? Sterownik wywołuje
JuicerFactory.getJuicers(List<Fruit> fruits)
, aby uzyskaćList<Juicer>
. Kontroler następnie pętli przez każdy sokowirówka i wywołujeJuicer.juice(fruits)
. Czy często zdarza się, że fabryka zwraca listę wystąpień? - Prowadzenie rejestru owoców i sokowirów w
Map
? Sterownik wywołujeFruitsRegistry.getJuicer(Fruit fruit)
dla każdego owocu, a następnie wywołuje każdy sokowirówkę w pętli.
Bardzo atrakcyjna odpowiedź. Zamierzam przezwyciężyć te pomysły przez jakiś czas i zobaczyć, w jaki sposób przyniosą one korzyści dla mojego prawdziwego scenariusza biznesowego. I dzięki za linki do narzędzi skanowania classpath! – Somu