c++ - una - estrategias politicas para conseguir votos
Una estrategia contra la política y una política contra la estrategia (2)
Pensé que eran lo mismo .
Cuando descubrí por primera vez el patrón de 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.
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 a lo largo vino el patrón de Política y me permitiría una flexibilidad aún mayor en el suministro de parámetros a una clase contenedora - clases completas, equipadas como me gustara, aunque intercambiando dinámicamente el comportamiento ... eso no fue 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 poderosos 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?
Las políticas se establecen principalmente en tiempo de compilación, mientras que las estrategias se establecen en tiempo de ejecución. Además, las políticas son generalmente un concepto de C ++ y se aplican solo a una minoría de otros idiomas (por ejemplo D), mientras que el patrón de estrategia está disponible para muchos (¿la mayoría?) Lenguajes orientados a objetos, y lenguajes que tratan funciones como ciudadanos de primera clase como python .
Habiendo dicho eso:
Una política, que se determina en tiempo de compilación, generalmente solo es útil para situaciones especiales en las que desea una lógica de aplicación diferente por binario. Por ejemplo, podría desarrollar un software ligeramente personalizado para cada cliente, ya sea a través de una interfaz web, o a mano, esto sería un patrón basado en políticas.
Una estrategia se determina en tiempo de ejecución, y de hecho se puede cambiar sobre la marcha. Por ejemplo, puede tener un software que implemente una interfaz de usuario y lógica diferente para la fuerza de ventas que para el grupo de soporte, pero todos deben tratar con la misma información de cliente y licencia, así que en lugar de tener dos aplicaciones mantenidas por separado, simplemente tiene una aplicación cambios de interfaz según sea necesario.
-Adán