реализация специфического поведения
Друзья!
Я рискну ещё раз описать словами ситуацию в надежде получить дельный совет, хотя уже и сам понимаю, насколько это неблагодарное занятие - давать советы, не зная деталей проекта. И тем не менее. Есть такая механика в одной игре (забыл название), когда герой может на время стать зомби. И в этом состоянии он лечится ядом и, наоборот, дамажится исцеляющими зельями и магией. Нужно реализовать нечто подобное, то есть изменять принимаемые эффекты при наличии некоторых статусов. У меня сделан и работает вариант, когда текущие статус-эффекты модифицируют свойства самого персонажа - в геттере прописан запуск метода, перебирающего все действующие статус-эффекты и собирающего в кучу модификаторы соответствующего свойства. А вот как в обратную сторону сделать? Наследование и переопределение сеттера не подходит, т.к. подобное поведение является временным. Понятно, что если подобные эффекты единичны, то можно и if вкатать да проверить, но как-то это не по-православному. |
Ну, если у нас уже есть экземпляр, то чтобы временно изменить свойства персонажа, можно оборачивать его в Декоратор.. Будет какой-нибудь var zombie = ZombieDecorator(character). И подменять им персонажа. Декоратор будет модифицировать воздействия нужным образом.
Либо, если хочется скрыть все это внутри персонажа, то можно и внутрь него внедрить декоратор. При этом публичные методы не будут знать, с кем именно они работают - они будут работать просто с интерфейсом iChar каким-нибудь. Просто в какой-то момент ты будешь подменять чара декоратором Добавлено через 2 часа 26 минут а еще можно через по умолчанию пустой Адаптер все влияния, такие, как дамаг и прочее.. И при разных воздействии просто втыкать нужный адаптер в метод setAdapter - ZombieAdapter, IceAdapter, VampierAdapter, StoneAdapter и т.п. .. |
ZergMaster, спасибо.
|
Декоратор - нужен для динамического добавления функциональности объекту к его основной.
Адаптер - приводит один интерфейс к другому. @ZergMaster как у вас структурные шаблоны стали поведенчискими, для меня остается загадкой. UPD ну и тут ситуация в двух словах: "объект поменял свое состояние из-за чего поменялось его поведение" |
Цитата:
Вопрос вдогонку. Как уважаемая аудитория относится к назначению свойств-маркеров, влияющих на поведение объекта? |
Цитата:
|
Ну вот так:
Код AS3:
|
СлаваRa
прикольно. Примерно это я и имел ввиду, когда говорил про декоратор внутри чара, и чтобы был метод changeDecorator, который подменивает методы. Адаптер подходит в том смылсе, что мы как раз соединяем два интерфеса - интерфейс зомби накладываем на интерфейс чара. Но да, паттерн State тут подходит идеально, это именно он и есть, просто я его не знал/забыл, вот и вывалил велосипед. ) |
Главное ограничение шаблона "Состояние" - это организация состояний как взаимоисключающих элементов, в соответствии с теорией конечных автоматов. Теперь нужно покумекать над реализацией пребывания объекта одновременно в нескольких состояниях :)
|
Вот представь, что есть физически здоровые люди, с расстройством психи. Его физическое состояние в норме, его психологическое состояние нет, но они не исключающие друг друга, как например живое не может быть мертвым и наоборот, все всегда зависит от постановки(формулировки) задачи.
|
Часовой пояс GMT +4, время: 18:38. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.