9.8. Template Method

El marco de trabajo de una aplicación nos permite heredar de una clase o conjunto de ellas y crear una nueva aplicación, reutilizando la mayoría del código de las clases existentes y sobreescribiendo una o más funciones para adaptar la aplicación a nuestras necesidades.

Una característica importante de Template Method es que está definido en la clase base (a veces como una función privada) y no puede cambiarse -el Template Method es lo que permanece invariable. Llama a otras funciones de clase base (las que se sobreescriben) para hacer su trabajo, pero el programador cliente no es necesariamente capaz de llamarlo directamente, como puede verse aquí:

//: C10:TemplateMethod.cpp
// Simple demonstration of Template Method.
#include <iostream>
using namespace std;

class ApplicationFramework {
protected:
  virtual void customize1() = 0;
  virtual void customize2() = 0;
public:
  void templateMethod() {
    for(int i = 0; i < 5; i++) {
      customize1();
      customize2();
    }
  }
};

// Create a new "application":
class MyApp : public ApplicationFramework {
protected:
  void customize1() { cout << "Hello "; }
  void customize2() { cout << "World!" << endl; }
};

int main() {
  MyApp app;
  app.templateMethod();
} ///:~

Listado 9.20. C10/TemplateMethod.cpp


El motor que ejecuta la aplicación es el Template Method. En una aplicación gráfica, este motor sería el bucle principal de eventos. El programador cliente simplemente proporciona las definiciones para customize1() y customize2(), y la aplicación está lista para ejecutarse.