I. Wzorce kreacyjne
1. Singleton
2. Budowniczy
3. Prototyp
4. Fabryka
5. Fabryka abstrakcyjna
II. Wzorce strukturalne
1. Adapter
2. Most
3. Kompozyt
4. Dekorator
5. Fasada
6. Pyłek
7. Pełnomocnik
III. Wzorce czynnościowe
1. Łańcuch zobowiązań
2. Polecenie
3. Interpreter
4. Iterator
5. Mediator
6. Pamiątka
7. Obserwator
8. Stan
9. Strategia
10. Metoda szablonowa
11. Odwiedzający

Metoda Szablonowa (Template Method) - wzorzec projektowy (design pattern) - java

1. Cel:
Wzorzec Metoda Szablonowa (Template Method) służy do definiowania algorytmu,
który umożliwia podklasom przedefiniowanie części algorytmu bez zmiany jego struktury.
Używamy go do ponownego użycia kodu.
Algorytm jest użyty podczas czasu kompiliacji. Użyty może być ten sam algorytm wiele razy.
Gwarantuje użycie algorytmu.
2. Problem:
Chcemy nadpisać metodę którą ponownie użyjemy. Chcemy użyć algorytmu w naszej operacji.
Chcemy zdefiniować kroki w podklasie, chcemy pozwolić podklasie na pewne kroki algorytmu
bez zmiany algorytmu i sekwencji wykonania. Pewne kroki chcemy nadpisać i użyć w nich naszego algorytmu.

3. Rozwiązanie:
Wzorzec jest zbudowany na podstawie klasy abstrakcyjnej. Klasa bazowa uruchamia klasę dziacko.
Używamy medoty szablonowej, która jest uruchamiana wraz z abstrakcyjnymi metodami które są nadpisywane.
I te metody nadpisywane to jest nasz algorytm który używamy.
Przykładem wzorca jest metoda compareTo i interface Comparable.
Powszechnie używany w Inversion of Control (IoC).

4. Diagram klas wzorca Metoda Szablonowa (Template Method):


5. Implementacja:
Klasa testująca:
  1. public class TemplateMethodTest {
  2. public static void main(String[] args) {
  3. House wooden = new WoodenHouse();
  4. wooden.buildhouse();
  5. }
  6. }
Implementacja abstrakcyjnej klasy metody szablonowej:
  1. abstract class House {
  2. public final void buildhouse() {
  3. constructBase();
  4. constructWalls();
  5. constructRoof();
  6. constructWindows();
  7. constructDoors();
  8. paintHouse();
  9. }
  10.  
  11. public abstract void paintHouse();
  12.  
  13. public abstract void constructDoors();
  14.  
  15. public abstract void constructWindows();
  16.  
  17. public abstract void constructWalls();
  18.  
  19. private final void constructRoof() {
  20. System.out.println("Dach został zbudowany.");
  21. }
  22.  
  23. private final void constructBase() {
  24. System.out.println("Fundamenty zostały zbudowane.");
  25. }
  26. }
Konkretna implementacja wzorca:
  1. public class WoodenHouse extends House {
  2. @Override
  3. public void paintHouse() {
  4. System.out.println("Dom został pomalowany.");
  5. }
  6. @Override
  7. public void constructDoors() {
  8. System.out.println("Drzwi zostały zainstalowane");
  9. }
  10. @Override
  11. public void constructWindows() {
  12. System.out.println("Okna zostały zainstalowane");
  13. }
  14. @Override
  15. public void constructWalls() {
  16. System.out.println("Drewniane ściany zostały zbudowane.");
  17. }
  18. }
Wynik programu jest następujący:

Fundamenty zostały zbudowane.
Drewniane ściany zostały zbudowane.
Dach został zbudowany.
Okna zostały zainstalowane
Drzwi zostały zainstalowane
Dom został pomalowany.

6. Zastosowanie w kodzie java:
- wszystkie nieabstrakcyjne metody w: java.io.InputStream, java.io.OutputStream, java.io.Reader
i java.io.Writer. Takie jak java.io.InputStream#skip(), java.io.InputStream#read()
- wszystkie nieabstrakcyjne metody w: java.util.AbstractList, java.util.AbstractSet i java.util.AbstractMap
takie jak: java.util.AbstractList#indexOf (), java.util.Collections#sort()
- javax.servlet.http.HttpServlet, wszystkie: doXXX() metody domyślnie używają HTTP 405 “Method Not Allowed” błędu odpowiedzi.
Możesz nadpisać każdą z nich.
created by cv.java.org.pl © 2023 All Rights Reserved.