Какво представлява шаблонът за проектиране на метода на шаблона?

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

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





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





MAKEUSEOF ВИДЕО НА ДЕНЯ

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





как да кажа каква е дънната ми платка

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

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

final void templateMethod() { 
abstractOperation1();
abstractOperation2();

concreteOperation1();
concreteOperation2();

hook();
}

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



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

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

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





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

public abstract class Database { 
// template method
final void databaseTemplate() {
// abstract methods
setDBDriver();
setCredentials();

// concrete method
connect();

// abstract methods
createDB();
setData();
readData();

// hook methods
if (userWantsToUpdate()) {
updateData();
}

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

// concrete method
closeConnection();
}

abstract void setDBDriver();
abstract void setCredentials();
abstract void createDB();
abstract void setData();
abstract void readData();
abstract void updateData();
abstract void deleteData();

void connect() {
System.out.println("Connecting to database...");
}

void closeConnection() {
System.out.println("Destroying database connection...");
}

boolean userWantsToUpdate() {
return false;
}

boolean userWantsToDelete() {
return false;
}
}

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





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

public class MySQL extends Database { 
@Override
void setDBDriver() {
System.out.println("Selecting MySQL driver...");
}

@Override
void setCredentials() {
System.out.println("Setting MySQL database Credential...");
}

@Override
void createDB() {
System.out.println("Creating a new table...");
}

@Override
void setData() {
System.out.println("Inserting data into database...");
}

@Override
void readData() {
System.out.println("Retrieving data from database...");
}

@Override
void updateData() {
System.out.println("Updating data in database...");
}

@Override
void deleteData() {
System.out.println("Deleting data from database...");
}
}

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

public class Main { 
public static void main(String[] args) {
Database mySQLDB = new MySQL();
mySQLDB.databaseTemplate();
}
}

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

  Метод на шаблон на MySQL база данни

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

@Override 
boolean userWantsToUpdate() {
return true;
}

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

  Актуализация на метода на шаблон на база данни MySQL

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

Windows 10 Home срещу Pro срещу Enterprise

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

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

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