Шаблон Template: поведение по умолчанию
Last updated: 10 мая 2025 г.Template
– это просто абстрактный класс, который задает скелет для расширяющих его классов.
Приведем пример из жизни.
Например, наша жизнь:
Рождаемся -> заканчиваем школу -> заканчиваем университет -> работаем -> умираем. Сплошная скука(((. Эта последовательность (то есть именно сама последовательность без подробностей) и есть скелет.
Абстрактный класс Template
просто задает этот скелет(последовательность). А класс реализующий этот абстрактный класс, раскрывает каждый этап.
1//Вот тот самый абстрактный класс, который
2//задает скелет.
3abstract class Life {
4
5 //Как видим это действительно просто скелет.
6
7 //То есть все методы абстрактные, у них нет
8 //реализаций
9 abstract void Burn();
10 abstract void finishSchool();
11 abstract void finishColledge();
12 abstract void Work();
13 abstract void Die();
14
15 //и определяется специальный метод run(),
16 //который задает последовательность
17 //вызовов методов выше.
18 void run() {
19 Burn();
20 finishSchool();
21 finishColledge();
22 Work();
23 Die();
24 }
25}
26
27//Давайте же создадим теперь реализацию Template
28//абстрактного класса. Пускай она будет описывать
29//жизнь Джона Смита. В этом классе как уже было
30//сказано должны быть раскрыты этапы, которые задавал
31//абстрактный класс то есть абстрактные методы должны
32//быть реализованы. Эти реализации как раз и будут
33//запускаться методом run в определенной
34//последовательности.
35class JohnSmith extends Life {
36 public void Burn() {
37 System.out.println(
38 "Burn in Japan");
39 }
40
41 public void finishSchool() {
42 System.out.println(
43 "finished North high school");
44 }
45
46 public void finishColledge() {
47 System.out.println(
48 "finished Tokyo University");
49 }
50
51 public void Work() {
52 System.out.println(
53 "Worked as AnimeMaker (forgive him lord)");
54 }
55
56 public void Die() {
57 System.out.println(
58 "Died in Ogata at 87 yesrs old");
59 }
60}
61
62public class TemplateExample {
63 public static void main(String args[]) {
64 JohnSmith johnSmith = new JohnSmith();
65 //запускаем реализованые методы
66 johnSmith.run();
67 }
68}
Скомпилируем java файл и запустим программу.

Как видим, Джон Смит успешно прожил свою жизнь в правильной последовательности.
То есть еще раз, суть этого шаблона проектирования в том, что есть абстрактный класс, который задает названия методов и последовательность их выполнения для расширяющих этот абстрактный класс классов.
Когда у нас в приложении должно быть много классов, которые по своему выполняют какую-то конкретную последовательность, этот шаблон проектирования может пригодиться.
Следующие уроки
Что такое Spring Framework и зачем он нужен
20
мин.
Внедрение зависимостей с помощью сеттера.
17
мин.
Внедрение значений из внешнего файла в поля бина.
18
мин.