Metoda wytwórcza w języku Go
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ład koncepcyjny
W Go nie da się zaimplementować klasycznego wzorca Metody wytwórczej z racji braku takich funkcjonalności języków obiektowych jak klasy i dziedziczenie. Możemy jednak zaimplementować jego okrojoną wersję - Fabrykę Prostą.
W poniższym przykładzie będziemy produkować różne rodzaje broni stosując strukturę fabryczną.
Zaczniemy od stworzenia interfejsu iGun
definiującego wszystkie metody właściwe broniom. Mamy typ struktury gun
implementujący interfejs iGun. Dwie konkretne bronie — ak47
i muszkiet
zawierają strukturę broni i pośrednio implementują wszystkie metody iGun
.
Struktura gunFactory
służy za fabrykę tworzącą bronie wybranego typu na podstawie przekazanego jej argumentu. Klientem jest tu main.go. Zamiast pracować bezpośrednio z ak47
lub z muszkietem
, zależna jest od gunFactory
w zakresie generowania instancji różnych typów broni zależnie od parametrów-łańcuchów znaków.