Бесплатный курс по Java: от основ до продвинутого уровня
Шаблон Template в Java: поведение по умолчанию
Template – это просто абстрактный класс, который задает скелет для расширяющих его классов.
Приведем пример из жизни.
Например, наша жизнь:
Рождаемся -> заканчиваем школу -> заканчиваем университет -> работаем -> умираем.Сплошная скука(((. Эта последовательность (то есть именно сама последовательность без подробностей) и есть скелет.
Абстрактный класс Template просто задает этот скелет(последовательность). А класс реализующий этот абстрактный класс, раскрывает каждый этап.
//Вот тот самый абстрактный класс, который
//задает скелет.
abstract class Life {
//Как видим это действительно просто скелет.
//То есть все методы абстрактные, у них нет
//реализаций
abstract void Burn();
abstract void finishSchool();
abstract void finishColledge();
abstract void Work();
abstract void Die();
//и определяется специальный метод run(),
//который задает последовательность
//вызовов методов выше.
void run() {
Burn();
finishSchool();
finishColledge();
Work();
Die();
}
}
//Давайте же создадим теперь реализацию Template
//абстрактного класса. Пускай она будет описывать
//жизнь Джона Смита. В этом классе как уже было
//сказано должны быть раскрыты этапы, которые задавал
//абстрактный класс то есть абстрактные методы должны
//быть реализованы. Эти реализации как раз и будут
//запускаться методом run в определенной
//последовательности.
class JohnSmith extends Life {
public void Burn() {
System.out.println(
“Burn in Japan”);
}
public void finishSchool() {
System.out.println(
“finished North high school”);
}
public void finishColledge() {
System.out.println(
“finished Tokyo University”);
}
public void Work() {
System.out.println(
“Worked as AnimeMaker (forgive him lord)”);
}
public void Die() {
System.out.println(
“Died in Ogata at 87 yesrs old”);
}
}
public class TemplateExample {
public static void main(String args[]) {
JohnSmith johnSmith = new JohnSmith();
//запускаем реализованые методы
johnSmith.run();
}
}
Скомпилируем java файл и запустим программу.
Как видим, Джон Смит успешно прожил свою жизнь в правильной последовательности.
То есть еще раз, суть этого шаблона проектирования в том, что есть абстрактный класс, который задает названия методов и последовательность их выполнения для расширяющих этот абстрактный класс классов.
Когда у нас в приложении должно быть много классов, которые по своему выполняют какую-то конкретную последовательность, этот шаблон проектирования может пригодиться.