Fabryka abstrakcyjna (wzorzec projektowy)

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji, wyszukiwania

Fabryka abstrakcyjna (ang. Abstract Factory) – kreacyjny wzorzec projektowy, którego celem jest dostarczenie interfejsu do tworzenia różnych obiektów jednego typu (tej samej rodziny) bez specyfikowania ich konkretnych klas[1]. Umożliwia jednemu obiektowi tworzenie różnych, powiązanych ze sobą, reprezentacji podobiektów określając ich typy podczas działania programu[2]. Fabryka abstrakcyjna różni się od Budowniczego, tym, że kładzie nacisk na tworzenie produktów z konkretnej rodziny, a Budowniczy kładzie nacisk na sposób tworzenia obiektów[3].

Przykład zastosowania[edytuj | edytuj kod]

Rozpatrzmy aplikację kliencką, która łączy się ze zdalnym serwerem. Celem projektanta takiej aplikacji jest to, aby była ona przenośna. Jednym z rozwiązań takiego problemu jest stworzenie fabryki, która będzie tworzyła odpowiednie obiekty w zależności od tego na jakiej platformie się znajduje[4][5][6].

Struktura[edytuj | edytuj kod]

Struktura wzorca

Jak widać na załączonym diagramie klas wzorzec zbudowany jest z kilku podstawowych klas. Klasa Fabryka abstrakcyjna deklaruje abstrakcyjny interfejs umożliwiający tworzenie produktów. Interfejs ten jest implementowany w Fabrykach konkretnych, które odpowiedzialne są za tworzenie konkretnych produktów. Każda fabryka konkretnego produktu posiada także metodę wytwórczą tego produktu[5].

Konsekwencje[edytuj | edytuj kod]

Jednym z plusów wykorzystania wzorca jest możliwość ukrycia szczegółów implementacyjnych klas reprezentujących konkretny produkt - klient widzi tylko interfejs. Ukryciu ulegają także nazwy tych klas, co nie wymusza ich zapamiętywania i odizolowuje klienta od problemu określenia do której klasy należy obiekt[3].

Do zysków należy także możliwość całkowitego ukrycia implementacji obiektów przed klientem. Klient widzi tylko interfejs i nie ma możliwości zajrzenia do kodu oraz to, że wymuszana jest spójność produktów[7].

Do minusów należy zaliczyć trudność rozszerzania rodziny obiektów o nowe podobiekty. Wymusza to modyfikację klasy fabryki abstrakcyjnej oraz wszystkich obiektów, które są tworzone przez nią[3].

Przykłady[edytuj | edytuj kod]

Zobacz też[edytuj | edytuj kod]

Wikimedia Commons

Przypisy

  1. Opis wzorca na stronie SourceMaking. [dostęp 2009-03-18].
  2. Opis wzorca na stronie DoFactory.com (ang.). [dostęp 2009-03-18].
  3. 3,0 3,1 3,2 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Inżynieria oprogramowania: Wzorce projektowe (Wyd. II). Warszawa: WNT, 2008, s. 110. ISBN 978-83-204-3472-9.
  4. Przykład zastosowania fabryki abstrakcyjnej w celu zapewnienia przenośności. [dostęp 2009-03-18].
  5. Przykład zastosowania wzorca (ang.). [dostęp 2009-03-18].
  6. Opis wzorca na stronie JavaCamp.org. [dostęp 2009-03-18].

Bibliografia[edytuj | edytuj kod]

  1. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Inżynieria oprogramowania: Wzorce projektowe (Wyd. II). Warszawa: WNT, 2008. ISBN 978-83-204-3472-9.