Patrón de método de plantilla


En la programación orientada a objetos , el método de plantilla es uno de los patrones de diseño de comportamiento identificados por Gamma et al. [1] en el libro Design Patterns . El método de plantilla es un método en una superclase, generalmente una superclase abstracta, y define el esqueleto de una operación en términos de una serie de pasos de alto nivel. Estos pasos se implementan ellos mismos mediante métodos auxiliares adicionales en la misma clase que el método de plantilla .

Los métodos auxiliares pueden ser métodos abstractos , en cuyo caso se requieren subclases para proporcionar implementaciones concretas, o métodos de enlace , que tienen cuerpos vacíos en la superclase. Las subclases pueden (pero no es obligatorio) personalizar la operación anulando los métodos de enlace. La intención del método de plantilla es definir la estructura general de la operación, al tiempo que permite que las subclases refinen o redefinan ciertos pasos. [2]

En tiempo de ejecución, el algoritmo representado por el método de plantilla se ejecuta enviando el mensaje de plantilla a una instancia de una de las subclases concretas. A través de la herencia, el método de plantilla en la clase base comienza a ejecutarse. Cuando el método de plantilla envía un mensaje a uno mismo solicitando uno de los métodos auxiliares, el mensaje será recibido por la subinstancia concreta. Si se ha anulado el método auxiliar, se ejecutará la implementación anulada en la subinstancia; si no se ha anulado, se ejecutará la implementación heredada en la clase base. Este mecanismo asegura que el algoritmo general siga los mismos pasos cada vez, al tiempo que permite que los detalles de algunos pasos dependan de qué instancia recibió la solicitud original para ejecutar el algoritmo.

Este patrón es un ejemplo de inversión de control porque el código de alto nivel ya no determina qué algoritmos ejecutar; en su lugar, se selecciona un algoritmo de nivel inferior en tiempo de ejecución.

Algunos de los mensajes propios enviados por el método de plantilla pueden ser métodos de enganche. Estos métodos se implementan en la misma clase base que el método de plantilla, pero con cuerpos vacíos (es decir, no hacen nada). Los métodos de gancho existen para que las subclases puedan anularlos y, por lo tanto, puedan ajustar la acción del algoritmo sin la necesidad de anular el método de plantilla en sí. En otras palabras, proporcionan un "gancho" en el que "colgar" las implementaciones variantes.

En el diagrama de clases de UML anterior , AbstractClassdefine una templateMethod()operación que define el esqueleto (plantilla) de un comportamiento mediante


Un diagrama de clases UML de muestra para el patrón de diseño del método de plantilla. [4]
Método de plantilla en LePUS3 . [5]