2012-03-08 2 views
-1

У меня есть проблемы с поиском подходящих шаблонов для того, что я хочу делать.Шаблон стратегии, который обращается к членам пользователя

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

Теперь проблема заключается в том, что этой Стратегии потребуется изменить доступ ко всем позициям существующих блоков в игровом поле, но очевидно, что информация находится в пользовательском классе Стратегии (класс игры), и я не могу иметь круговой зависимостей.

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

Итак, любой способ разрешить это? Возможно, я ошибаюсь, желая использовать шаблон стратегии. Помощь очень ценится.

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

Я кодирования в Java, если это помощь

+0

Развязка - это всегда хороший момент для начала. Что относительно интерфейсов/слушателей? Я сталкиваюсь с некоторыми проблемами с моим римейком Bomberman. Постарайтесь, чтобы программа была абстрактной, насколько это возможно, - это заставило меня много времени. –

+0

Прежде всего, вы не можете передать «ссылку на функцию» в Java, вам придется сделать какой-то объект функции для обхода этого. Другой шаблон, который вы можете использовать, - это шаблон. В любом случае, я не вижу трудности с передачей ссылок на другой объект, который он должен использовать. –

ответ

0

Я думаю, в конце концов, это был вид слишком сложно предположить, в вне коробки ответ.

Я как-то следил за намеком Traxdata на развязку вместе с предложением Мистера Смита фактически передать ссылки на другие объекты.

Мое окончательное решение состоит из поля FieldManager, Field и Strategy. FieldManager содержит экземпляр Field и Strategy. Класс Field содержит код создания блока.

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

Смежные вопросы