Топ-100Шаблон Template: поведение по умолчанию - CodOrbits
LogoCodOrbits

Раздел: Шаблоны проектирования

Раздел о популярных паттернах проектирования в Java: Singleton, Factory, MVC и других архитектурных решениях.

Все разделы
Иконка Шаблоны проектирования

Шаблон Template: поведение по умолчанию

Last updated: 10 мая 2025 г.

Template – это просто абстрактный класс, который задает скелет для расширяющих его классов.

Приведем пример из жизни.

Example

Например, наша жизнь:

Рождаемся -> заканчиваем школу -> заканчиваем университет -> работаем -> умираем. Сплошная скука(((. Эта последовательность (то есть именно сама последовательность без подробностей) и есть скелет.

Абстрактный класс 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
мин.

Similar Articles Icon
Divider

Внедрение зависимостей с помощью сеттера.

17
мин.

Similar Articles Icon
Divider

Внедрение значений из внешнего файла в поля бина.

18
мин.

Similar Articles Icon