- Создайте среду бизнес-модели с тремя типами Жителей: Гном (для инженеров), Эльф (для торговцев) и Тролль (для менеджеров). Теперь создайте класс с названием Projrct, который создает различное население и заставляет их взаимодействовать (interact( )) друг с другом используя множественную диспетчеризацию.
- Измените предыдущий пример, чтобы сделать взаимодействие более детальным. Каждый Житель может случайным образом производить Оружие с помощью метода getWeapon( ): Гномы используют Jargon или Play, Эльфы используют InventFeature или SellImaginaryProduct а Тролли используют Edict и Schedule. Вы должны решить, какое оружие "выигрывает", а какое "проигрывает" при каждом взаимодействии (как и в PaperScissorsRock.java). Добавьте член-функцию battle( ) к Project, которая принимает двух Жителей и сравнивает их друг с другом. Теперь создайте член-функцию meeting( ) для Project, которая создает группы Гномов, Эльфов и Менеджеров, и организует битвы групп друг с другом пока не останутся члены только одной группы. Это "победители".
- Измените PaperScissorsRock.java, заменив двойную диспетчеризацию
на таблицу поиска. Наиболее простой способ сделать это - создать Карту
из Карт (Map), ключами в каждой Карте
являются класс каждого объекта. Затем вы можете выполнить поиск,
записав:
((Map)map.get(o1.getClass())).get(o2.getClass())
Обратите внимание насколько легче переконфигурировать систему. Когда более подходящим способом является этот подход по сравнению с жестко закодированной динамической диспетчеризацией? Можете ли вы создать систему, которая имеет синтаксически упрощенное использование динамической диспетчеризации, но использует таблицу поиска? - Измените Упражнение 2, чтобы в нем использовалась техника таблицы поиска, используемая в Упражнении 3.
← | Визитер (Visitor): вариант множественной диспетчеризации | Умножение языков (Multiple languages) | → |