Какой Шаблон разработки использовать?

Проблема для моделирования является этим:

Иерархия уровней в Army, Начиная с национальной армии полностью, через полевые армии, подблоки и в конечном счете отдельных мужчин. Каждый уровень может включить ссылки на один или несколько других классов такой как General или Officer или что бы то ни было. Единицы в говорят, что полевая армия должна смочь общаться друг с другом, специально для целей смоделировать моральный дух, сцепление, и т.д., а также с теми из любой вражеской полевой армии (например, маршрутизация единицы в моей армии влияет на вражеский моральный дух положительно). Кроме того, каждая единица должна общаться с теми, которые выше и ниже ее в иерархии (в очевидных целях).

Я думал о наличии ссылок в физической иерархии, представленной фактическими указателями (возможно двусторонний) в каждом из классов этих объектов (например. army* в каждой единице и unit* или целый набор их в каждой армии) и затем использование шаблона разработки наблюдателя для реализации любой коммуникации в других случаях (таких как случай я упомянул выше).

Однако не будучи никаким экспертом в шаблонах разработки или программируя в этом отношении я не знаю, существует ли какой-либо другой более эффективный способ, чтобы сделать это. Любая справка значительно ценилась бы.

6
задан Kristian D'Amato 27 June 2010 в 22:17
поделиться

3 ответа

Существует модель / шаблон проектирования для передачи событий между разрозненными объектами, которые могут не знать о существовании друг друга до того, как произойдет обмен данными. Шаблон называется «Опубликовать / подписаться».

Каждая сущность отправляет события, которые она хочет опубликовать, брокеру и сообщает брокеру о том, какие типы событий ей могут быть интересны. Брокер обеспечивает, чтобы подписывающиеся организации узнавали о публикуемых событиях, которые они находят интересными.

Это похоже на шаблон Observer, но в шаблоне Observer каждая заинтересованная сущность подписывается индивидуально на каждую сущность, от которой ей нужны события. Я думаю, что это может привести к большим накладным расходам, потому что это требует от всех заботы о создании и разрушении вещей.

В любом случае, есть хорошая статья в Википедии о публикации / подписке .

Я бы использовал шаблон Composite (что в основном означает дерево некоторой формы) для отдельных армий. И, возможно, Наблюдатель для отношений вверх и вниз по иерархии или с братьями и сестрами. Но Observer требует слишком много времени для регистрации и отмены регистрации, чтобы работать в общем случае.

3
ответ дан 17 December 2019 в 00:03
поделиться

Для моделирования структуры это выглядит как классическое применение паттерна Composite. Затем вы можете использовать Visitor или Interpreter для моделирования операций над субъединицами.

1
ответ дан 17 December 2019 в 00:03
поделиться

Похоже на синдром «маленького мальчика с узором». Вы ищете шаблон вместо того, чтобы думать о своей проблеме.

Естественной структурой данных для иерархии является дерево. Я бы начал с этого.

Если требуется, чтобы каждая единица в дереве взаимодействовала со всеми остальными, я бы сказал, что Observer не для вас. Каждая единица должна быть зарегистрирована со всеми остальными. Каждый раз, когда запускается событие, у вас будет N-квадратная огненная буря сообщений.

Посредник может быть лучше. Юниты будут отправлять события посреднику, позволяя потребителям регистрировать свою заинтересованность в получении определенного типа сообщения. Производители и потребители знают только о посреднике, а не друг о друге. Слабая связь - ваш друг.

3
ответ дан 17 December 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: