Strategy y Template Method

Strategy

Con este patrón es posible definir una familia de algoritmos para resolver el mismo problema de manera tal que se pueda seleccionar el algoritmo de acuerdo al contexto que requiere emplearlo. Permite en definitiva, separar las variaciones de determinado comportamiento de manera tal que el contexto más abstracto que las usa (StrategyClient) quede cerrado a los cambios y nuevas implementaciones de dichos comportamientos.

diagrama_strategy

Template Method

Define el esqueleto de una operación, delegando en las subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos de la operación sin cambiar la estructura definida en un nivel de abstracción mayor.

diagrama_template_method

Costos y Beneficios

Ambos patrones abordan el mismo problema de diseño: aislar las variaciones en el comportamiento de ciertos aspectos de una tarea. Strategy emplea composición y herencia, Template Method emplea herencia. En ambos casos el polimorfismo juega un papel central en el diseño y reemplaza la utilización de estructuras condicionales.

Con Strategy se deben crear al menos dos objetos: el contexto (o cliente) y la estrategia. Template Method demanda la creación de una instancia. Debido a que en Strategy el cliente y la estrategia están separados, es posible cambiar la estrategia en tiempo de ejecución; con Template Method, no. Incluso es posible que el cliente y las estrategias estén en proyectos o módulos desarrollados y desplegados de manera independiente.

Referencias

[1] Design Patterns: Elements of Reusable Object-Oriented Software

Leave a Reply