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

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

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

Example

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

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

Абстрактный класс 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 файл и запустим программу.

Как видим, Джон Смит успешно прожил свою жизнь в правильной последовательности.  

То есть еще раз, суть этого шаблона проектирования в том, что есть абстрактный класс, который задает названия методов и последовательность их выполнения для расширяющих этот абстрактный класс классов.

Когда у нас в приложении должно быть много классов, которые по своему выполняют какую-то конкретную последовательность, этот шаблон проектирования может пригодиться.

Что такое Spring Framework и зачем он нужен

Spring Framework: основы DI и IoC. Узнайте, как работать с бинами, BeanFactory и XML-конфигурацией на примере.
Time to read: 20

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

Изучите внедрение зависимостей в Spring через сеттеры. Практический гайд по DI с примерами кода Java и XML-конфигурации.
Time to read: 17

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

Как внедрять значения в Spring-бины из properties-файлов. Практическое руководство по использованию property-placeholder и ${} синтаксиса в XML-конфигурации.
Time to read: 18