2008-10-23 4 views
11

Когда я впервые обнаружил шаблон стратегии, я был поражен, казалось бы, бесконечными возможностями, которые он мне предлагал и моими программами. Я мог бы лучше инкапсулировать поведение моих моделей и даже менять это поведение на лету. Но стратегия также может быть использована для предоставления признаков и полезной нагрузки для содержащего объекта - данных, которые были объявлены в суперклассе. Жизнь была прекрасна.Стратегия против политики и политика против стратегии

class MyMonsterAI { float const see_radius_; virtual void attack() = 0; /* .. */ }; 
class ElveAI  { ElveAI() : see_radius_(150.0f) {} /* ... */ }; 
class CycloneAI  { CycloneAI() : see_radius_(50.0f) {} /* ... */ }; 
class Monster  { MyMonsterAI* ai_; }; 

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

Оба образца кажутся очень мощными для меня, и мне нравится использовать их в разных обстоятельствах. Но я не уверен, что в некоторых ситуациях есть конкретные/типичные/более практичные приложения.

Мне интересно: где вы используете стратегии и политики? Где лучше всего подходят?

+1

Ваш пост очень много резюме, почему я ненавижу C++ – Mecki 2008-10-23 20:25:11

+0

Но он имеет большой титул! – Mnebuerquo 2008-10-23 20:26:33

ответ

21

Политики в основном устанавливаются во время компиляции, а стратегии устанавливаются во время выполнения. Кроме того, политики, как правило, являются концепцией C++ и применяются только к меньшинству других языков (например, D), тогда как шаблон стратегии доступен для многих (большинство?) Объектно-ориентированных языков и языков, которые рассматривают функции как граждан первого класса, такие как python ,

Это, как говорится:

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

  • Стратегия определяется во время выполнения и фактически может быть изменена «на лету». Например, у вас может быть программное обеспечение, которое реализует другой пользовательский интерфейс и логику для Salesforce, чем для группы поддержки, но все они должны иметь дело с одной и той же информацией о клиенте и лицензировании, чтобы вместо двух отдельно поддерживаемых приложений у вас было просто одно приложение, при необходимости измените интерфейс.

-Adam

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