Metoda wytwórcza (wzorzec projektowy)

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

Metoda wytwórcza (ang. factory method) – kreacyjny wzorzec projektowy, którego celem jest dostarczenie interfejsu do tworzenia obiektów nieokreślonych jako powiązanych typów[1][2]. Tworzeniem egzemplarzy zajmują się podklasy[3].

Przykład zastosowania[edytuj | edytuj kod]

Rozpatrzmy aplikację, której funkcjonalność może być rozszerzana za pomocą wtyczek. Może to być przeglądarka plików graficznych. Mnogość formatów graficznych sprawia, że jest prawie niemożliwym zaimplementowanie ich wszystkich naraz. Potrzebne więc jest uniwersalne rozwiązanie – takim rozwiązaniem jest system wtyczek do zapisywania i odczytywania plików graficznych. Metoda wytwórcza zwraca wskaźnik do obiektu klasy, który może manipulować obrazami danego formatu. Dzięki takiemu rozwiązaniu bezproblemowo możemy rozszerzać listę obsługiwanych formatów.

Struktura wzorca[edytuj | edytuj kod]

Wzorzec metody fabrykującej w języku angielskim

We wzorcu występują dwie ogólne klasy bądź interfejsy definiujące pewien typ zasobów (Product) oraz sposób ich tworzenia (Creator, metoda factoryMethod()). Od nich wyprowadza się konkretne klasy zasobów (ConcreteProduct) wraz z tworzącymi je klasami wytwórczymi (ConcreteCreator), które dostarczają odpowiednią implementację metody factoryMethod(). Komponent pragnący tworzyć zasoby i operować na nich, korzysta z ogólnych interfejsów Product oraz Creator, umożliwiając wybór konkretnej implementacji w sposób dynamiczny[1].

Konsekwencje stosowania[edytuj | edytuj kod]

  1. Aplikacja wykorzystująca metody wytwórcze jest niezależna od konkretnych implementacji zasobów oraz procesu ich tworzenia. Mogą być one ustalane dynamicznie w trakcie uruchomienia lub zmieniane podczas działania aplikacji.
  2. Wzorzec hermetyzuje proces tworzenia obiektów, zamykając go za ściśle zdefiniowanym interfejsem. Właściwość ta jest wykorzystywana, gdy tworzenie nowego obiektu jest złożoną operacją (np. wymaga wstrzyknięcia dodatkowych zależności).
  3. W wielu obiektowych językach programowania konstruktory klas muszą posiadać ściśle określone nazwy, co może być źródłem niejednoznaczności podczas korzystania z nich. Wzorzec umożliwia zastosowanie nazwy opisowej oraz wprowadzenie kilku metod fabryki tworzących obiekt na różne sposoby.

Przykłady[edytuj | edytuj kod]

Podobne wzorce[edytuj | edytuj kod]

Przypisy

  1. 1,0 1,1 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Inżynieria oprogramowania: Wzorce projektowe (Wyd. II). Warszawa: Wydawnictwo Naukowo-Techniczne, 2008, s. 119-130. ISBN 978-83-204-3472-9.
  2. Opis wzorca na stronie DoFactory.com (ang.). [dostęp 2009-03-11].