- Czym różnią się te trzy wzorce?
Fabryka: Tworzy obiekty bez ujawniania klientowi logiki tworzenia instancji.
Metoda fabryczna: Zdefiniuj interfejs do tworzenia obiektu, ale pozwól, aby podklasy zdecydowały, którą klasę utworzyć. Metoda Factory pozwala klasie odroczyć tworzenie instancji do podklas
Fabryka abstrakcyjna: zapewnia interfejs do tworzenia rodzin powiązanych lub zależnych obiektów bez określania ich konkretnych klas.
Wzorzec AbstractFactory używa kompozycji do delegowania odpowiedzialności za tworzenie obiektu do innej klasy, podczas gdy wzorzec projektowania metody Factory wykorzystuje dziedziczenie i do tworzenia obiektu korzysta z pochodnej klasy lub podklasy
- Kiedy stosować który?
Fabryka: Klient potrzebuje tylko klasy i nie dba o to, jaką konkretną implementację otrzymuje.
Metoda fabryczna: Klient nie wie, jakie konkretne klasy będzie musiał utworzyć w czasie wykonywania, ale chce tylko uzyskać klasę, która wykona zadanie.
AbstactFactory: Gdy system musi utworzyć wiele rodzin produktów lub chcesz udostępnić bibliotekę produktów bez ujawniania szczegółów implementacji.
Abstrakcyjne klasy Factory są często implementowane przy użyciu metody Factory. Metody fabryczne są zwykle wywoływane w ramach metod szablonów.
- A także, jeśli to możliwe, jakieś przykłady Java związane z tymi wzorcami?
Factory and FactoryMethod
Zamiar:
Zdefiniuj interfejs do tworzenia obiektu, ale pozwól, aby podklasy zdecydowały, którą klasę utworzyć. Metoda fabryczna pozwala klasie odroczyć tworzenie instancji do podklas.
Diagram UML :
Produkt: Definiuje interfejs obiektów tworzonych przez metodę Factory.
ConcreteProduct: Implementuje interfejs produktu
Twórca: Deklaruje metodę Factory
ConcreateCreator: implementuje metodę Factory w celu zwrócenia instancji ConcreteProduct
Stwierdzenie problemu: Utwórz fabrykę gier, korzystając z metod fabrycznych, które definiują interfejs gry.
Fragment kodu:
Wzór fabryczny. Kiedy stosować metody fabryczne?
Porównanie z innymi wzorami kreacyjnymi:
Projektowanie zaczyna się od metody fabrycznej (mniej skomplikowane, bardziej konfigurowalne, podklasy rozprzestrzeniają się) i ewoluuje w kierunku fabryki abstrakcyjnej, prototypu lub konstruktora (bardziej elastyczny, bardziej złożony), gdy projektant odkrywa, gdzie potrzebna jest większa elastyczność
Abstrakcyjne klasy Factory są często implementowane za pomocą metod fabrycznych , ale można je również zaimplementować przy użyciu Prototype
Odniesienia do dalszej lektury: Wzory projektowania zaopatrzenia