Co to jest wzorzec projektowy metody szablonu?

Co to jest wzorzec projektowy metody szablonu?
Czytelnicy tacy jak Ty pomagają wspierać MUO. Kiedy dokonujesz zakupu za pomocą linków na naszej stronie, możemy otrzymać prowizję partnerską.

Wzorzec projektowy metody szablonu umożliwia zdefiniowanie kroków algorytmu w ramach pojedynczej metody klasy. Pozwala to ograniczyć określone operacje aplikacji do jednej metody.





Każdy krok algorytmu, który definiuje metoda szablonu, jest metodą wewnętrzną. Jednak metoda szablonu obsługuje tylko implementację niektórych jej metod wewnętrznych. Podklasy zazwyczaj implementują jedną lub więcej metod wewnętrznych metody szablonu.





MAKEUSEOF WIDEO DNIA

Podklasa może implementować metodę abstrakcyjną, ale nie może przedefiniować algorytmu zaimplementowanego przez metodę końcową.





Jak działa metoda szablonowa

Typowy wzorzec metody szablonowej będzie miał następującą strukturę:

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

concreteOperation1();
concreteOperation2();

hook();
}

Pierwszą ważną rzeczą, na którą należy zwrócić uwagę, jest to, że metoda templateMethod() jest ostateczna, więc żadna podklasa nie może przesłonić tej metody. Inną ważną rzeczą, na którą należy zwrócić uwagę, są trzy typy metod, których używa wzorzec metody szablonu: konkretna, abstrakcyjna i hakowa.



gdzie mogę wydrukować papier?

Klasa abstrakcyjna, w której znajduje się metoda szablonu, implementuje wszystkie jej konkretne metody, podczas gdy konkretne podklasy implementują swoje metody abstrakcyjne. Metoda przechwytująca zwykle nic nie robi domyślnie, ale podklasa ma możliwość nadpisania tych metod, gdy jest to konieczne.

dlaczego dysk działa przy 100

Implementacja wzorca metody szablonu w Javie

Wzorzec metody szablonu działa jako struktura dla aplikacji. Tak więc często zobaczysz ten wzorzec we frameworkach oprogramowania, które zapewniają plan rozwoju aplikacji.





Na przykład możesz połączyć swoją aplikację z jednym z wielu systemów baz danych. Kroki łączenia się z bazą danych i korzystania z niej przebiegają według podobnego szablonu:

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;
}
}

Ta przykładowa klasa Database używa wzorca metody szablonu do tworzenia szablonu, którego można użyć z dowolną bazą danych. Aby korzystać z bazy danych, Twoja aplikacja będzie musiała się z nią połączyć, a następnie zerwać połączenie po użyciu. Działania te są zwykle takie same dla wszystkich baz danych. Dlatego abstrakcyjna klasa Database może implementować łączyć() oraz zamknijPołączenie() metody.





Inne metody w metodzie szablonu będą się różnić w zależności od typu bazy danych. Na przykład baza danych MySQL przechowuje dane w tabelach, podczas gdy Baza danych MongoDB przechowuje dane w kolekcjach . Jeśli chcesz użyć Baza danych MySQL w Javie , po prostu utwórz nową klasę MySQL, która rozszerza klasę 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...");
}
}

Klasa MySQL implementuje wszystkie abstrakcyjne metody klasy Database. Może również zastąpić niektóre konkretne metody. Nie może jednak dotknąć Szablon bazy danych() metoda, która używa końcowego słowa kluczowego.

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

Ta klasa Main tworzy nowy obiekt bazy danych MySQL i używa metody szablonu do symulowania sposobu, w jaki aplikacja łączy się z bazą danych. Uruchomienie metody main wyświetla na konsoli następujące dane wyjściowe:

  Metoda szablonu bazy danych MySQL

Na wyjściu zauważysz, że aplikacja nigdy nie wywołuje Uaktualnij dane() oraz Usunąć dane() metody. Dlatego ważne są metody hakowe. W bazie danych SQL będziesz chciał tworzyć nowe tabele, wstawiać dane i wyświetlać swoje dane. Jednak możesz nie chcieć aktualizować lub usuwać danych. Dlatego metody przechwytujące dają podklasom opcję kontrolowania tych krytycznych aspektów algorytmu.

@Override 
boolean userWantsToUpdate() {
return true;
}

Po prostu dodając powyższy kod do klasy MySQL, aplikacja aktualizuje teraz dane w bazie danych. Jeśli ponownie uruchomisz klasę Main, wyświetli następujące zaktualizowane dane wyjściowe:

kopiuj zdjęcia z iPhone'a na komputer!
  Aktualizacja metody szablonu bazy danych MySQL

Jak widać, aplikacja aktualizuje teraz dane w Bazie Danych.

Korzyści z używania wzorca projektowego Metoda szablonowa

Główną zaletą wzorca metody szablonowej jest to, że promuje możliwość ponownego użycia oprogramowania. Ten wzorzec projektowy obsługuje również wydajne programowanie. Podklasa musi jedynie zaimplementować metody, które są unikalne dla jej działania.

Ponadto aplikacja korzystająca ze wzorca metody szablonu jest bezpieczniejsza, ponieważ klasy zewnętrzne nie mogą zmieniać swojej struktury działania.