Cuando descubrí por primera vez el patrón de la estrategia, me sorprendieron las posibilidades aparentemente infinitas que ofrecía para mí y mis programas. Podría encapsular mejor el comportamiento de mis modelos e incluso cambiar este comportamiento sobre la marcha. Pero la estrategia también podría usarse para proporcionar rasgos y carga útil al objeto que lo contiene, datos que se declararon en una superclase. La vida estaba bien.Una estrategia contra la política y una política contra la estrategia
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_; };
Y entonces llegó el Patrón de política y me permitiría una mayor flexibilidad en el suministro de parámetros a una clase que contiene - clases enteras, equipado sin embargo, me ha gustado, aunque intercambiar dinámicamente el comportamiento ... que no era demasiado fácil (¡a menos que parte de la política fuera tener una estrategia!).
class MyMonsterTrait { typedef typename ElveAI AI; };
template< class MonsterTrait >
class Monster : public MonsterTrait::AI
{
void idle (void) { attack(); }
};
Ambos patrones parecen ser muy potentes para mí y me gusta usar ambos, en diferentes circunstancias. Pero no estoy seguro de si hay aplicaciones particulares/típicas/más prácticas para cualquiera de las dos situaciones.
Me pregunto: ¿dónde usas estrategias y dónde políticas? ¿Dónde están más adecuados?
Tu entrada es más o menos el resumen de por qué odio a C++ – Mecki
pero tiene un gran título! – Mnebuerquo