You are on page 1of 6

Wzorzec

Fabryka
Wzorzec projektowy Fabryka (ang. Factory Pattern) to jeden z popularnych wzorców
projektowych, należący do grupy wzorców kreacyjnych. Wzorzec Fabryka pozwala na
zdefiniowanie interfejsu, który jest odpowiedzialny za tworzenie obiektów, ale pozwala
na wybór klas konkretnej implementacji, które mają zostać zastosowane w celu
utworzenia obiektów. W ten sposób klient nie musi znać konkretnej klasy obiektu, którą
chce utworzyć, lecz korzysta z interfejsu fabryki, aby uzyskać nowy obiekt.
Istnieją dwa główne rodzaje Fabryki: prosta fabryka oraz fabryka abstrakcyjna. W
przypadku prostej fabryki, tworzenie obiektów jest zdelegowane do klasy fabryki, która
ma jedną metodę do tworzenia obiektów. W przypadku fabryki abstrakcyjnej, jest to
bardziej zaawansowana forma fabryki, która umożliwia tworzenie powiązanych
obiektów, takich jak grupy obiektów, na przykład związanych z danym tematem.
Po co używać
wzorca fabryki?

spełnia zasadę odwrócenia zależności . Rodzina tworzonych obiektów spełnia


wspólny interfejs, którym następnie się posługujemy. Wpływa to bardzo
pozytywnie na testowalność kodu (przykład mechanizmu IoC). Przykładowo
zamiast tworzyć nowe klasy new Apple(), new Banana() itd. posiadamy metodę
fabrykującą zwracającą obiekty interfejsu IFruit.
skupienie logiki w metodzie fabrykującej, dzięki czemu zmiany w kodzie można
wprowadzić w jednym miejscu systemu.
upraszcza proces inicjalizacji skomplikowanych klas (w przypadku
rozbudowanych konstruktorów).
spełnia zasadę otwarty na rozbudowę, zamknięty na modyfikację (open/closed
principle). Do fabryki w dość łatwy sposób można dodać dodatkową klasę,
mając przy tym pewność, że nie zepsujemy czegoś co aktualnie działa.
Kiedy używać
fabryki?
Fabryk używamy tam, gdzie chcemy odciąć się od tworzenia instancji klas
posługując się konkretnym typem. Może być to spowodowane np. skomplikowaną
logiką tworzenia instancji. Np. wiemy, że chcemy uzyskać instancję spełniającą
jakiś interfejs, ale jaki to będzie konkretny typ, zależy od dodatkowych
parametrów – wtedy używamy fabryki. Powody za użyciem fabryk:
klasa ma skomplikowany, przeciążony wielokrotnie konstruktor. Oznaczać to
może oczywiście błędnie zaprojektowaną klasę, ale może też wskazywać na to,
że utworzenie instancji klasy potrzebuje dodatkowej logiki.
utworzenie instancji klasy jest poprzedzone instrukcją warunkową if. Z całą
pewnością Taką logikę należy zahermetyzować wewnątrz fabryki
w momencie pisania programu nie wiesz, której instancji potrzebujesz (bo np.
jest to uzależnione od parametru zwracanego z API). Ponownie, logikę
hermetyzujemy wewnątrz fabryki.
Przykład z życia
Fabryka samochodów jest jak fabryka do produkcji
obiektów, a modele samochodów są jak produkty
fabryki. Zamiast tworzyć każdy samochód osobno (co
byłoby czasochłonne i kosztowne), fabryka może użyć
jednej linii produkcyjnej, aby wyprodukować wiele
identycznych modeli samochodów. Wzorzec Fabryki
pozwala na stworzenie odpowiedniej liczby obiektów
danego typu z jednego źródła, co z kolei pozwala na
łatwiejszą kontrolę i zarządzanie nimi.
Zalety Wady

Poziom abstrakcji: Fabryka umożliwia tworzenie Złożoność: Użycie fabryki wprowadza dodatkową
obiektów bez ujawniania ich konstrukcji, co pozwala na warstwę abstrakcji i zwiększa złożoność kodu, co może
zachowanie wysokiego poziomu abstrakcji i ograniczenie utrudnić jego zrozumienie i utrzymanie.
zależności między obiektami. Nadmierna elastyczność: Fabryka może zapewnić
Kontrola: Wzorzec pozwala na centralne zarządzanie nadmierną elastyczność, co oznacza, że ​może być trudno
procesem tworzenia obiektów i kontrolę nad tym, jakie zrozumieć, co jest produkowane przez system.
obiekty są tworzone i w jakim czasie. Potencjalny narzut wydajności: Dodatkowy narzut
Łatwość zmian: Dzięki użyciu fabryki, zmiana Krótkoz opisz,
wynikający co chcesz
użycia fabryki omówić.
może wpłynąć na wydajność
implementacji konkretnych obiektów jest łatwiejsza, systemu.
ponieważ fabryka odpowiada za ich tworzenie, a inne
części aplikacji nie muszą być modyfikowane.
Dziękuje za uwagę
Igor Starzyński 48303

You might also like