Читатели като вас помагат в подкрепа на MUO. Когато правите покупка чрез връзки на нашия сайт, ние може да спечелим комисионна за партньор.

Моделът за проектиране на метод на шаблон ви позволява да дефинирате стъпките на алгоритъм в рамките на един метод на клас. Това ви позволява да ограничите конкретни операции на приложение до един метод.

Всяка стъпка от алгоритъма, която методът на шаблона дефинира, е вътрешен метод. Обаче шаблонният метод обработва само изпълнението на някои от вътрешните си методи. Подкласовете обикновено имплементират един или повече от вътрешните методи на шаблонния метод.

Подкласът може да имплементира абстрактен метод, но не може да предефинира алгоритъма, имплементиран от краен метод.

Как работи методът на шаблона

Типичен модел на метод на шаблон ще има следната структура:

финалневалиденtemplateMethod(){
abstractOperation1();
abstractOperation2();

конкретна операция1();
конкретна операция2();

кука ();
}

Първото важно нещо, което трябва да се отбележи е, че templateMethod() е final, така че нито един подклас не може да замени този метод. Другото важно нещо, което трябва да се отбележи, са трите типа методи, които моделът на метода на шаблона използва: конкретен, абстрактен и кука.

instagram viewer

Абстрактният клас, който съдържа метода на шаблона, имплементира всички негови конкретни методи, докато конкретните подкласове имплементират неговите абстрактни методи. Методът hook обикновено не прави нищо по подразбиране, но подкласът има способността да замени тези методи, когато е необходимо.

Внедряване на модела на шаблонен метод в Java

Моделът на метода на шаблона действа като рамка за приложение. Така че често ще виждате този модел в софтуерни рамки, които предоставят план за разработка на приложения.

Например, можете да свържете вашето приложение към една от многото системи за бази данни. Стъпките за свързване и използване на база данни следват подобен шаблон:

публиченабстрактнокласБаза данни{
// шаблонен метод
финалневалиденбаза данниTemplate(){
// абстрактни методи
setDBDriver();
setCredentials();

// конкретен метод
свързване ();

// абстрактни методи
createDB();
setData();
четене на данни ();

// методи за кука
if (userWantsToUpdate()) {
актуализиране на данни ();
}

if (userWantsToDelete()) {
deleteData();
}

// конкретен метод
closeConnection();
}

абстрактноневалиденsetDBDriver();
абстрактноневалиденsetCredentials();
абстрактноневалиденcreateDB();
абстрактноневалиденsetData();
абстрактноневалиденreadData();
абстрактноневалиденupdateData();
абстрактноневалиденdeleteData();

невалиденсвържете се(){
System.out.println("Свързване към база данни...");
}

невалиденcloseConnection(){
System.out.println("Разрушаване на връзката с базата данни...");
}

булевоuserWantsToUpdate(){
връщаненевярно;
}

булевопотребителят иска да изтрие(){
връщаненевярно;
}
}

Този примерен клас база данни използва модела на метода на шаблона, за да създаде шаблон, който можете да използвате с всяка база данни. За да използвате база данни, вашето приложение ще трябва да се свърже с нея, след което да разруши връзката след използване. Тези дейности обикновено са еднакви за всички бази данни. Следователно абстрактният клас база данни може да реализира свързвам () и closeConnection() методи.

Другите методи в метода на шаблона ще се различават в зависимост от типа база данни. Например MySQL база данни съхранява данни в таблици, докато a Базата данни MongoDB съхранява данни в колекции. Ако искате да използвате a MySQL база данни в Java, просто създайте нов MySQL клас, който разширява класа Database:

публиченкласMySQLсе простираБаза данни{
@Override
невалиденsetDBDriver(){
System.out.println("Избира се MySQL драйвер...");
}

@Override
невалиденsetCredentials(){
System.out.println("Задаване на идентификационни данни за база данни на MySQL...");
}

@Override
невалиденcreateDB(){
System.out.println("Създаване на нова таблица...");
}

@Override
невалиденsetData(){
System.out.println("Вмъкване на данни в база данни...");
}

@Override
невалиденreadData(){
System.out.println("Извличане на данни от база данни...");
}

@Override
невалиденupdateData(){
System.out.println("Данните в базата данни се актуализират...");
}

@Override
невалиденdeleteData(){
System.out.println("Данните се изтриват от базата данни...");
}
}

Класът MySQL имплементира всички абстрактни методи на класа Database. Може също така да замени някои конкретни методи. Въпреки това не може да докосне база данниTemplate() метод, който използва ключовата дума final.

публиченкласОсновен{
публиченстатиченневалиденосновен(Низ [] аргументи){
База данни mySQLDB = нов MySQL();
mySQLDB.databaseTemplate();
}
}

Този главен клас създава нов обект на MySQL база данни и използва метода на шаблона, за да симулира как приложението ще се свърже с базата данни. Изпълнението на основния метод отпечатва следния изход на конзолата:

В изхода ще забележите, че приложението никога не извиква updateData() и deleteData() методи. Ето защо методите на куките са важни. В SQL база данни ще искате да създадете нови таблици, да вмъкнете данни и да прегледате вашите данни. Възможно е обаче да не искате да актуализирате или изтриете данни. Следователно методите на куката дават на подкласовете опцията да контролират тези критични аспекти на алгоритъма.

@Override
булевоuserWantsToUpdate(){
връщаневярно;
}

Чрез просто добавяне на кода по-горе към класа MySQL, приложението сега актуализира данните в базата данни. Ако стартирате основния клас отново, той ще покаже следния актуализиран изход:

Както можете да видите, приложението сега актуализира данните в базата данни.

Ползите от използването на шаблона за проектиране на метода на шаблона

Основно предимство на модела на метода на шаблона е, че той насърчава повторното използване на софтуера. Този модел на проектиране също поддържа ефективно програмиране. Един подклас трябва да прилага само методи, които са уникални за неговата работа.

Освен това приложение, което използва модела на метода на шаблона, е по-сигурно, тъй като външните класове не могат да променят неговата операционна структура.