introducir
El método de plantilla define el esqueleto de un algoritmo operativo y retrasa algunos pasos a una subclase. El método de plantilla permite que la subclase redefine ciertos pasos específicos del algoritmo sin cambiar la estructura del algoritmo.
Los métodos de plantilla son una técnica básica para la reutilización de código, que es particularmente importante en las bibliotecas de clases porque extraen el comportamiento público en las bibliotecas de clases. El método de plantilla conduce a una estructura de control inverso, que es la legendaria "Ley de Hollywood", es decir, "No nos busque, lo buscaremos", que se refiere a la clase principal que llama a la operación de una clase, no al revés. Las manifestaciones concretas son clases abstractas (y métodos abstractos en ellas) en lenguajes de programación orientados a objetos, así como subclases que heredan la clase abstracta (y los métodos abstractos).
texto
Por ejemplo, hacer té y café tienen los mismos pasos, como agua hirviendo, elaborar, verterlo en una taza, agregar ingredientes pequeños, etc. Sin embargo, el método de preparar cada bebida y los ingredientes pequeños agregados son diferentes, por lo que podemos usar el método de plantilla para lograr este paso principal.
Primero, defina los pasos abstractos:
La copia del código es la siguiente:
var caffeinebeVeage = function () {
};
CaffeinebeVeage.prototype.preparerecipe = function () {
this.boilwater ();
this.brew ();
this.pouroncup ();
if (this.customerwantscondiments ()) {
// Si puede agregar ingredientes pequeños, agregar
this.addcondiments ();
}
};
CaffeinebeVeage.prototype.boilwater = function () {
console.log ("¡Hervir el agua!");
};
CaffeinebeVeage.prototype.pouroncup = function () {
console.log ("¡Pon la bebida en la copa!");
};
Caffeinebeverage.prototype.brew = function () {
arrojar un nuevo error ("Este método debe reescribirse!");
};
CaffeinebeVeage.prototype.addcondiments = function () {
arrojar un nuevo error ("Este método debe reescribirse!");
};
// Agregar materiales pequeños de forma predeterminada
Caffeinebeverage.prototype.customerwantscondiments = function () {
devolver verdadero;
};
Esta función extiende todos los pasos básicos y los pasos principales en el prototipo. La elaboración y la adición de ingredientes pequeños no se implementan, y es utilizado por la función correspondiente a la bebida específica para implementar. Además, si se debe agregar ingredientes pequeños (CustomerWantscondiments) devuelve verdadero de forma predeterminada. Este valor se puede reescribir al reescribir la subcunción.
Las siguientes dos funciones son las funciones correspondientes para elaborar café y preparar el té:
La copia del código es la siguiente:
// hacer café
var Coffee = function () {
CaffeinebeVeage.apply (esto);
};
Coffee.prototype = new CaffeineBeverage ();
Café.prototype.brew = function () {
console.log ("¡Quiero verter café de la cafetera!");
};
Café.prototype.addcondiments = function () {
console.log ("Agregar azúcar y leche");
};
Café.prototype.customerwantscondiments = function () {
regresar confirmar ("¿Quieres agregar azúcar y leche?");
};
// Hacer hojas de té
var tea = function () {
CaffeinebeVeage.apply (esto);
};
Tea.prototype = new CaffeineBeverage ();
Tea.prototype.brew = function () {
console.log ("puuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
};
Tea.prototype.addcondiments = function () {
console.log ("Agregar limón!");
};
Tea.prototype.customerwantscondiments = function () {
regresar confirmar ("¿Quieres agregar limón?");
};
Además, el uso de Confirm permite a los usuarios elegir si se debe agregar ingredientes pequeños por sí mismos, lo cual es muy bueno, ¿no?
Resumir
El método de plantilla se aplica a las siguientes situaciones:
1. Implemente la parte inmutable de un algoritmo a la vez y deje el comportamiento mutable en subclases para implementarlo
2. El comportamiento público en cada subclase debe extraerse y concentrarse en una clase de padres públicos para evitar la duplicación del código, y las diferencias se separan en nuevas operaciones. Finalmente, reemplace estos diferentes códigos con un método de plantilla para el phishing estas nuevas operaciones.
3. Control de extensiones de subclase. El método de plantilla solo llama a la operación de "gancho" en puntos específicos, para que permita extensiones en estos puntos.
A diferencia de los patrones de políticas, los métodos de plantilla utilizan la herencia para cambiar parte del algoritmo, mientras que los patrones de políticas usan delegados para cambiar todo el algoritmo.