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>