Реализация шаблона стратегии

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


person Tato    schedule 13.05.2009    source источник


Ответы (3)


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

Таким образом, ни Персонаж, ни Оружие (два основных компонента шаблона стратегии в этом примере) не решают, какую стратегию использовать, а код, использующий Персонажей и Оружие, делает это. Просто создав новый объект оружия (скажем, RayGunWeapon) и «передав» его вашему персонажу, вы измените поведение персонажа.

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

person Vincent Ramdhanie    schedule 13.05.2009

То, как вы решите внедрить его, определит, где находится код, и будет ли он компилироваться или выполняться во время выполнения.

Например, если вы используете внедрение зависимостей (DI), вы часто можете внедрить другую стратегию во время выполнения, изменив XML-файл.

Если вы используете АОП, то это будет во время выполнения или во время компиляции, в зависимости от того, как вы написали аспект.

Если вы используете Spring Framework, то это похоже на использование DI и может быть таким же простым, как подключение в другом классе.

Если вы используете локатор служб, это может быть так же просто, как замена другой DLL.

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

person James Black    schedule 14.05.2009

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

person mP.    schedule 13.05.2009