8

Esta es probablemente una pregunta para principiantes ya que soy nuevo en los patrones de diseño pero estaba mirando el Método de plantilla y los DP de estrategia y parecen muy similares. Puedo leer las definiciones, examinar los UML y ver ejemplos de código, pero a mí me parece que el patrón de Estrategia solo usa el patrón de Método de Plantilla, pero sucede que lo pasa y lo hace (es decir, composición).Plantilla Método y patrones de diseño de estrategia

Y para el caso, el Método de plantilla parece que es solo herencia básica de OO.

¿Me falta algún aspecto clave de sus diferencias? ¿Me estoy perdiendo algo sobre el Método de plantilla que lo hace más que simplemente herencia básica?

Nota: Hay una publicación anterior sobre esto (672083) pero es más sobre cuándo usarlo, lo que me ayuda a obtenerlo un poco más, pero quiero que mis pensamientos sobre los patrones sean válidos.

Respuesta

9

Básicamente todo se reduce a la semántica. El patrón de estrategia le permite pasar un algoritmo/procedimiento particular (la estrategia) a otro objeto y eso lo usará. El método de la plantilla le permite anular aspectos particulares de un algoritmo y al mismo tiempo mantener ciertos aspectos del mismo (mantener el orden igual, y tener cosas que siempre se hacen al inicio y al final, por ejemplo ... la 'plantilla') mientras que la herencia es una forma de modelar las relaciones 'IS-A' en los modelos de datos.

Ciertamente, los métodos de plantilla se implementado más fácilmente utilizando la herencia (aunque usted podría utilizar la misma facilidad composición, especialmente una vez que tenga funtores), y los patrones de estrategia con frecuencia son también métodos plantilla pero donde la sintaxis es similar a los significados son muy diferentes .

+0

+1 para una buena explicación concisa, y para mencionar la composición sobre la herencia –

0

El patrón Strategy diseño
proporciona una manera de intercambiar el algoritmo de un objeto dinámicamente en tiempo de ejecución
(a través de composición de objetos).

Por ejemplo, el cálculo de precios en un sistema de procesamiento de pedidos.
Para calcular los precios de diferentes maneras, se pueden admitir diferentes algoritmos de fijación de precios para que el algoritmo que se utilice pueda seleccionarse (inyectarse) e intercambiarse dinámicamente en el tiempo de ejecución.

El patrón de diseño Template Method
proporciona una manera de redefinir algunas partes del comportamiento de una clase estática en tiempo de compilación
(a través de subclases).

Por ejemplo, diseño de aplicaciones reutilizables (marcos).
La aplicación implementa las partes comunes (invariantes) del comportamiento para que los usuarios de la aplicación puedan escribir subclases para redefinir las partes variantes para satisfacer sus necesidades. Pero los escritores de subclases no deberían poder cambiar las partes invariables de ni el comportamiento ni la estructura del comportamiento (la estructura de las partes invariante y variante).