Wpisany przez Kamil Dworak,
20 sierpnia 2010 19:59
Metoda wytwórcza, albo inaczej metoda fabrykująca (ang. factory method) jest wzorcem konstrukcyjnym. Służy do tworzenia nowych obiektów, nieokreślonych, lecz związanych z jednym, wspólnym interfejsem. Następnie dodajemy kilka klas, które będą implementować owy interfejs (to właśnie one będą tworzyć konkretne produkty). Klasy te reprezentują bardziej szczegółowe postacie produktu. Metoda fabrykująca nadaje klasom pełną odpowiedzialność, dotyczącą produkcji obiektów.
Wyobraźmy sobie, że mamy fabrykę czekolady. W fabryce możemy produkować czekoladę gorzką, mleczną oraz czekoladę z orzechami i bakaliami. Wszystkie nasze produkty są podtypami typu czekolada. Definiujemy tutaj interfejs (czekolada) do tworzenia nowych obiektów, ale dopiero od klas, implementujących ten interfejs będzie zależeć jakiego to typu owa czekolada będzie.
Uogólniony diagram:
Wyobraźmy sobie, że mamy fabrykę czekolady. W fabryce możemy produkować czekoladę gorzką, mleczną oraz czekoladę z orzechami i bakaliami. Wszystkie nasze produkty są podtypami typu czekolada. Definiujemy tutaj interfejs (czekolada) do tworzenia nowych obiektów, ale dopiero od klas, implementujących ten interfejs będzie zależeć jakiego to typu owa czekolada będzie.
Uogólniony diagram:
Diagram odpowiadający załączonemu przykładowi:
- Definiujemy producenta (nasz creator).
- Wywołujemy metodę producenta, mająca za zadanie wyprodukować naszą czekoladę (jako parametr przekazujemy, na jaka czekoladę mamy ochotę).
- W metodzie tej tworzymy obiekt czekolada (początkowo null) i na podstawie przekazanego Stringa wywołujemy odpowiedni konstruktor.
- Dla nowo utworzonej czekolady wywołujemy metodę dawajCzekolade(), która przeprowadza nas przez cały proces produkcji i na końcu zwraca czekoladę.
- Klient otrzymuje upragnioną słodycz.
Implementacje
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Kamil Dworak | C# | Visual Studio 2008 | .cs | .cs | ***** / 6 |
Kamil Dworak | Java | .java | .java | ***** / 10 | |
Łukasz Guz | Java | Java 7 | .java | .java | ***** / 7 |
Poprawiony: 22 sierpnia 2010 08:35