Когда я впервые обнаружил шаблон стратегии, я был поражен, казалось бы, бесконечными возможностями, которые он мне предлагал и моими программами. Я мог бы лучше инкапсулировать поведение моих моделей и даже менять это поведение на лету. Но стратегия также может быть использована для предоставления признаков и полезной нагрузки для содержащего объекта - данных, которые были объявлены в суперклассе. Жизнь была прекрасна.Стратегия против политики и политика против стратегии
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_; };
И вместе пришел шаблон политики и это позволило бы мне еще большую гибкость в поставках параметров в вмещающем класс - целые классы, оборудованную однако мне понравилось, хотя и динамично обмениваясь поведением ... это было не слишком легко (если часть политики не будет иметь стратегию!).
Оба образца кажутся очень мощными для меня, и мне нравится использовать их в разных обстоятельствах. Но я не уверен, что в некоторых ситуациях есть конкретные/типичные/более практичные приложения.
Мне интересно: где вы используете стратегии и политики? Где лучше всего подходят?
Ваш пост очень много резюме, почему я ненавижу C++ – Mecki 2008-10-23 20:25:11
Но он имеет большой титул! – Mnebuerquo 2008-10-23 20:26:33