Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию.
Шаблон проектирования метода шаблона позволяет определить шаги алгоритма в рамках одного метода класса. Это позволяет ограничить определенные операции приложения одним методом.
Каждый шаг алгоритма, который определяет шаблонный метод, является внутренним методом. Однако метод шаблона обрабатывает только реализацию некоторых своих внутренних методов. Подклассы обычно реализуют один или несколько внутренних методов шаблонного метода.
Подкласс может реализовать абстрактный метод, но не может переопределить алгоритм, реализованный окончательным методом.
Как работает шаблонный метод
Типичный шаблон метода шаблона будет иметь следующую структуру:
окончательныйпустоташаблонМетод(){
абстрактная операция1();
абстрактная операция2();конкретная операция1();
конкретная операция2();
крюк();
}
Первое, на что следует обратить внимание, это то, что templateMethod() является окончательным, поэтому ни один подкласс не может переопределить этот метод. Еще одна важная вещь, на которую следует обратить внимание, — это три типа методов, которые использует шаблон метода шаблона: конкретные, абстрактные и ловушки.
Абстрактный класс, в котором находится метод шаблона, реализует все его конкретные методы, а конкретные подклассы реализуют его абстрактные методы. Метод ловушки обычно ничего не делает по умолчанию, но подкласс имеет возможность переопределить эти методы, когда это необходимо.
Реализация шаблона метода шаблона в Java
Шаблон метода шаблона выступает в качестве основы для приложения. Таким образом, вы часто будете видеть этот шаблон в программных средах, которые обеспечивают основу для разработки приложений.
Например, вы можете подключить свое приложение к одной из многих систем баз данных. Шаги для подключения к базе данных и ее использования следуют аналогичному шаблону:
публичныйабстрактныйсортБаза данных{
// метод шаблона
окончательныйпустоташаблон базы данных(){
// абстрактные методы
установитьДБДрайвер();
установитьУчетные данные();// конкретный метод
соединять();// абстрактные методы
создать БД();
установитьДанные();
читатьДанные();// хуковые методы
если (userWantsToUpdate()) {
обновитьДанные();
}если (userWantsToDelete()) {
удалитьДанные();
}// конкретный метод
закрытьСоединение();
}абстрактныйпустотасетдбдрайвер();
абстрактныйпустотаsetCredentials();
абстрактныйпустотасоздать БД();
абстрактныйпустотаsetData();
абстрактныйпустотачтение данных();
абстрактныйпустотаобновить данные();
абстрактныйпустотаудалить данные();пустотасоединять(){
Система.out.println("Подключение к базе данных...");
}пустотазакрытьСоединение(){
Система.out.println("Разрушение соединения с базой данных...");
}логическийпользовательWantsToUpdate(){
возвращатьсяЛОЖЬ;
}
логическийпользовательWantsToDelete(){
возвращатьсяЛОЖЬ;
}
}
В этом примере класс базы данных использует шаблон метода шаблона для создания шаблона, который можно использовать с любой базой данных. Чтобы использовать базу данных, вашему приложению необходимо подключиться к ней, а затем уничтожить соединение после использования. Эти действия обычно одинаковы для всех баз данных. Следовательно, абстрактный класс базы данных может реализовать соединять() и закрытьСоединение() методы.
Другие методы в методе шаблона будут различаться в зависимости от типа базы данных. Например, база данных MySQL хранит данные в виде таблиц, а База данных MongoDB хранит данные в коллекциях. Если вы хотите использовать База данных MySQL на Java, просто создайте новый класс MySQL, который расширяет класс Database:
публичныйсортMySQLрасширяетБаза данных{
@Override
пустотасетдбдрайвер(){
Система.out.println("Выбор драйвера MySQL...");
}@Override
пустотаsetCredentials(){
Система.out.println("Установка учетных данных базы данных MySQL...");
}@Override
пустотасоздать БД(){
Система.out.println("Создание новой таблицы...");
}@Override
пустотаsetData(){
Система.out.println("Внесение данных в базу...");
}@Override
пустотачтение данных(){
Система.out.println("Получение данных из базы данных...");
}@Override
пустотаобновить данные(){
Система.out.println("Обновление данных в базе...");
}
@Override
пустотаудалить данные(){
Система.out.println("Удаление данных из базы...");
}
}
Класс MySQL реализует все абстрактные методы класса Database. Он также может переопределить некоторые конкретные методы. Однако он не может касаться шаблон базы данных () метод, который использует ключевое слово final.
публичныйсортОсновной{
публичныйстатическийпустотаосновной(строка [] аргументы){
База данных mySQLDB = новый MySQL();
mySQLDB.databaseTemplate();
}
}
Этот основной класс создает новый объект базы данных MySQL и использует метод шаблона для моделирования того, как приложение будет подключаться к базе данных. Запуск метода main выводит на консоль следующий вывод:
В выводе вы заметите, что приложение никогда не вызывает обновитьДанные() и удалитьДанные() методы. Вот почему так важны крючковые методы. В базе данных SQL вы захотите создавать новые таблицы, вставлять данные и просматривать свои данные. Однако вы можете не захотеть обновлять или удалять данные. Следовательно, методы ловушек дают подклассам возможность управлять этими критическими аспектами алгоритма.
@Override
логическийпользовательWantsToUpdate(){
возвращатьсяистинный;
}
Просто добавив приведенный выше код в класс MySQL, приложение теперь обновляет данные в базе данных. Если вы снова запустите класс Main, он отобразит следующий обновленный вывод:
Как видите, теперь приложение обновляет данные в базе данных.
Преимущества использования шаблона проектирования «Метод шаблона»
Основным преимуществом шаблона метода шаблона является то, что он способствует повторному использованию программного обеспечения. Этот шаблон проектирования также поддерживает эффективное программирование. Подкласс должен реализовывать только те методы, которые уникальны для его работы.
Кроме того, приложение, использующее шаблон метода шаблона, более безопасно, поскольку внешние классы не могут изменить структуру его операций.