Metoda wytwórcza jest kreacyjnym wzorcem projektowym rozwiązującym problem tworzenia obiektów-produktów bez określania ich konkretnych klas.
Metoda wytwórcza definiuje metodę która ma służyć tworzeniu obiektów bez bezpośredniego wywoływania konstruktora (poprzez operator new). Podklasy mogą nadpisać tę metodę w celu zmiany klasy tworzonych obiektów.
Jeśli masz problem ze zrozumieniem różnicy pomiędzy poszczególnymi koncepcjami i wzorcami wytwórczymi, przeczytaj nasze Porównanie fabryk.
Przykłady użycia: Wzorzec Metoda wytwórcza jest szeroko rozpowszechniony w kodzie Java. Przydaje się gdy trzeba wyposażyć kod w wysoki poziom elastyczności.
Identyfikacja: Metody wytwórcze można rozpoznać po metodach kreacyjnych tworzących obiekty na podstawie konkretnych klas, ale zwracających typ abstrakcyjny lub interfejs.
Tworzenie międzyplatformowych elementów graficznego interfejsu użytkownika (GUI)
W poniższym przykładzie przyciski odgrywają rolę produktów, a okna dialogowe — twórców.
Różne rodzaje okien dialogowych wymagają własnych typów elementów. Dlatego na każde okno dialogowe tworzymy podklasę i nadpisujemy jej metody wytwórcze.
W rezultacie każdy rodzaj okna dialogowego stworzy instancje odpowiednich klas przycisków. Klasa bazowa okna dialogowego współdziała z produktami za pośrednictwem ich wspólnego interfejsu, więc jej kod będzie działał nawet po wszystkich zmianach.
buttons
buttons/Button.java: Wspólny interfejs produktu
buttons/HtmlButton.java: Konkretny produkt
buttons/WindowsButton.java: Kolejny konkretny produkt
factory
factory/Dialog.java: Bazowy twórca
factory/HtmlDialog.java: Konkretny twórca
factory/WindowsDialog.java: Kolejny konkretny twórca