Fabryka abstrakcyjna

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

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

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

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

  • Zobacz przykłady zastosowania wzorca na stronie Wikibooks

Zobacz też

Zobacz multimedia związane z tematem: Fabryka abstrakcyjna
  • Metoda wytwórcza – często implementuje klasy fabryk abstrakcyjnych
  • Prototyp – często implementuje klasy fabryk abstrakcyjnych
  • Singleton

Przypisy

  1. Opis wzorca na stronie SourceMaking. [dostęp 2009-03-18].
  2. Opis wzorca na stronie DoFactory.com. [dostęp 2009-03-18]. [zarchiwizowane z tego adresu (2008-12-06)]. (ang.).
  3. a b c 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]. [zarchiwizowane z tego adresu (2008-10-17)].
  5. Przykład zastosowania wzorca. [dostęp 2009-03-18]. [zarchiwizowane z tego adresu (2009-03-09)]. (ang.).
  6. Opis wzorca na stronie JavaCamp.org. [dostęp 2009-03-18].

Bibliografia

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

Linki zewnętrzne

Zobacz galerię związaną z tematem: Fabryka abstrakcyjna
  • Szczegółowy opis wzorca wraz z przykładami
  • p
  • d
  • e
Wzorce projektowe według książki Design patterns autorstwa Gangu Czterech
Wzorce kreacyjne
  • Budowniczy
  • Fabryka abstrakcyjna
  • Metoda wytwórcza
  • Prototyp
  • Singleton
Wzorce strukturalne
  • Adapter
  • Dekorator
  • Fasada
  • Kompozyt
  • Most
  • Pełnomocnik
  • Pyłek
Wzorce czynnościowe
  • Interpreter
  • Iterator
  • Łańcuch zobowiązań
  • Mediator
  • Metoda szablonowa
  • Obserwator
  • Odwiedzający
  • Pamiątka
  • Polecenie
  • Stan
  • Strategia