Principios y arquitectura / Patrones de diseño / De comportamiento
Template Method
Notas originales de SunDiaL · Ver fuente en inglés
El problema: Tienes claramente definidos los pasos de un algoritmo, pero su implementación varía. La solución: Definir los pasos que varían en métodos abstractos e implementarlos en clases derivadas.
public abstract class AnimalRewardRoutine
{
public void Execute()
{
this.Follow();
this.GivePaw();
this.Speak(); //abstract
this.Sit();
}
public void Follow() {/*follow owner*/}
public void GivePaw() {/*shake owner's hand*/}
public abstract void Speak();
public void Sit() {/*wait for reward*/}
}
public class CatRewardRoutine : AnimalRewardRoutine
{
public override void Speak(){ Console.WriteLine("Meow!") };
}
public class DogRewardRoutine : AnimalRewardRoutine
{
public override void Speak(){ Console.WriteLine("Woof!") };
}