Реализация шаблона стратегии - PullRequest
2 голосов
/ 13 мая 2009

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

Ответы [ 3 ]

4 голосов
/ 13 мая 2009

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

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

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

1 голос
/ 14 мая 2009

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

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

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

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

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

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

0 голосов
/ 13 мая 2009

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

...