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
[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]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]- Metoda wytwórcza – często implementuje klasy fabryk abstrakcyjnych
- Prototyp – często implementuje klasy fabryk abstrakcyjnych
- Singleton
Przypisy
[edytuj | edytuj kod]- ↑ Opis wzorca na stronie SourceMaking. [dostęp 2009-03-18].
- ↑ Opis wzorca na stronie DoFactory.com. [dostęp 2009-03-18]. [zarchiwizowane z tego adresu (2008-12-06)]. (ang.).
- ↑ 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.
- ↑ Przykład zastosowania fabryki abstrakcyjnej w celu zapewnienia przenośności. [dostęp 2009-03-18]. [zarchiwizowane z tego adresu (2008-10-17)].
- ↑ a b Opis wzorca na stronie EarthLink.net. [dostęp 2009-03-18]. [zarchiwizowane z tego adresu (2006-09-23)]. (ang.).
- ↑ Przykład zastosowania wzorca. [dostęp 2009-03-18]. [zarchiwizowane z tego adresu (2009-03-09)]. (ang.).
- ↑ Opis wzorca na stronie JavaCamp.org. [dostęp 2009-03-18].
Bibliografia
[edytuj | edytuj kod]- Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Inżynieria oprogramowania: Wzorce projektowe (Wyd. II). Warszawa: WNT, 2008. ISBN 978-83-204-3472-9.