Template method

Para calcular el precio de un producto, tenemos que considerar

Si elegimos modelar los productos mediante una jerarquía de subclasificación, tenemos

¿Dónde ubicamos la responsabilidad de determinar el precio de un producto?

Pensamos primero en cómo resolver el precio de venta de un producto Importado

metodo precioVenta()      precioVentaBase + (300 * peso)   fin

</code>

Y el producto nacional

metodo precioVenta()      precioVentaBase + precioVentaBase * 0.10 fin

</code>

El template method es una técnica que permite agrupar algoritmos similares, donde

Entonces en la clase producto definimos que el precio de venta sale del precio de venta base, y le pedimos a cada subclase que implemente el costo adicional:

metodo precioVenta()      precioVentaBase + self costoAdicional fin

</code>

En lenguajes con chequeo de tipos, Producto debe tener definido un costoAdicional en su interfaz. Esto se puede implementar

Vemos la implementación en xtend:

def double precioVenta() {     precioVentaBase + this.costoAdicional }

def double costoAdicional()   // abstract method

</code>

En lenguajes con tipado dinámico se puede definir un método que explícitamente devuelva error para obligar a las subclases a implementar cada operación primitiva. Vemos el ejemplo en Smalltalk:

precioVenta      ^precioVentaBase + self costoAdicional

costoAdicional      self subclassResponsibility

</code>