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