представлять
Метод шаблона определяет скелет эксплуатационного алгоритма и задерживает некоторые шаги до подкласса. Метод шаблона позволяет подклассу переопределить определенные конкретные шаги алгоритма без изменения структуры алгоритма.
Методы шаблонов являются основным методом повторного использования кода, который особенно важен в библиотеках классов, поскольку они извлекают общественное поведение в библиотеках классов. Метод шаблона приводит к структуре обратного управления, которая является легендарным «Голливудским законом», то есть «Не ищите нас, мы будем искать вас», который относится к тому, что родительский класс называет работу класса, а не наоборот. Конкретные проявления-это абстрактные классы (и абстрактные методы в них) в объектно-ориентированных языках программирования, а также подклассы, которые наследуют абстрактный класс (и абстрактные методы).
текст
Например, приготовление чая и кофе имеет одинаковые шаги, такие как кипящая вода, варева, наличие его в чашку, добавление небольших ингредиентов и т. Д.
Во -первых, определите абстрактные шаги:
Кода -копия выглядит следующим образом:
var caffeinebeverage = function () {
};
CaffeineBeverage.prototype.preparerecipe = function () {
this.boilwater ();
this.brew ();
this.pouroncup ();
if (this.customerwantscondiments ()) {
// Если вы можете добавить небольшие ингредиенты, добавьте
this.addcondiments ();
}
};
CaffeineBeverage.prototype.boilwater = function () {
console.log («Доведите воду до кипения!»);
};
CaffeineBeverage.prototype.pouronCup = function () {
console.log («Положите напиток в чашку!»);
};
CaffeineBeverage.prototype.brew = function () {
Выбросить новую ошибку («Этот метод должен быть переписан!»);
};
CaffeineBeverage.prototype.AddCondiments = function () {
Выбросить новую ошибку («Этот метод должен быть переписан!»);
};
// Добавить небольшие материалы по умолчанию
CaffeineBeverage.prototype.customerwantscondiments = function () {
вернуть истину;
};
Эта функция расширяет все основные шаги и основные шаги на прототипе. Пивоварение и добавление небольших ингредиентов не реализованы и используются функцией, соответствующей конкретным напиткам для реализации. Кроме того, добавлять ли небольшие ингредиенты (CustomerWantsCondiments) верно истинно по умолчанию. Это значение можно переписать при переписывании подфункции.
Следующие две функции являются соответствующими функциями для пивоварения кофе и пивоварения чая:
Кода -копия выглядит следующим образом:
// Сделать кофе
var coffee = function () {
Caffeinebeverage.apply (это);
};
Coffee.prototype = new CaffeineBeverage ();
Coffee.prototype.brew = function () {
console.log («Я хочу налить кофе из кофеварки!»);
};
Coffee.prototype.addcondiments = function () {
console.log («добавить сахар и молоко»);
};
Coffee.prototype.customerwantscondiments = function () {
вернуть подтверждение («Вы хотите добавить сахар и молоко?»);
};
// Сделать чайные листья
var tea = function () {
Caffeinebeverage.apply (это);
};
Чай.prototype = new CaffeineBeverage ();
Чай.prototype.brew = function () {
Console.log ("Puuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuU
};
Tea.prototype.addcondiments = function () {
console.log («Добавить лимон!»);
};
Чай.prototype.customerwantscondiments = function () {
вернуть подтверждение («Вы хотите добавить лимон?»);
};
Кроме того, использование подтверждения позволяет пользователям выбирать, следует ли добавлять небольшие ингредиенты самостоятельно, что очень хорошо, не так ли?
Суммировать
Метод шаблона применяется к следующим ситуациям:
1. Реализуйте неизменную часть алгоритма одновременно и оставьте изменяемое поведение для подклассов для его реализации
2. Общественное поведение в каждом подклассе должно быть извлечено и концентрировано в общественном родительском классе, чтобы избежать дублирования кода, а различия разделяются на новые операции. Наконец, замените эти разные коды методом шаблона для фишинга этих новых операций.
3. Управляющие расширения подкласса. Метод шаблона только вызывает операцию «крюка» в определенных точках, так что он позволяет расширить в этих точках.
В отличие от шаблонов политики, методы шаблонов используют наследование для изменения части алгоритма, в то время как шаблоны политики используют делегаты для изменения всего алгоритма.