Wzorzec projektowy metody fabrycznej


Intencja

  • Zdefiniuj interfejs do tworzenia obiektu, ale pozwól, aby podklasy decydowały o tym, która klasa ma zostać utworzona. Metoda fabryczna pozwala klasie odroczyć instancję do podklas.
  • Definiowanie „wirtualnego” konstruktora.
  • Operator new uznany za szkodliwy.

Problem

Framework musi ujednolicić model architektoniczny dla szeregu aplikacji, ale pozwolić poszczególnym aplikacjom na zdefiniowanie własnych obiektów domeny i zapewnienie ich instancji.

Dyskusja

Metoda fabryczna polega na tworzeniu obiektów, tak jak Metoda Szablonowa ma zaimplementować algorytm. Nadklasa określa wszystkie standardowe i ogólne zachowanie (używając czystych wirtualnych „symboli zastępczych” dla kroków tworzenia), a następnie deleguje szczegóły tworzenia do podklas, które są ponownie dostarczane przez klienta.

Metoda fabryczna sprawia, że projekt jest bardziej dostosowywalny i tylko w niewielkim stopniu bardziej skomplikowane. Inne wzorce projektowe wymagają nowych klas, podczas gdy metoda fabryczna wymaga tylko nowej operacji.

Ludzie często używają metody Factory jako standardowego sposobu tworzenia obiektów, ale nie jest to konieczne, jeśli: klasa, której instancja nigdy nie została utworzona zmiany lub tworzenie instancji ma miejsce w operacji, którą podklasy mogą łatwo nadpisać (na przykład operacja inicjalizacji).

Metoda fabryczna jest podobna do Abstract Factory, ale bez rodzin nacisku.

Metody fabryczne są rutynowo określane przez architekturę, a następnie implementowane przez użytkownika frameworka.

Struktura

Implementacja metody Factory omówionej w Gang of Four (poniżej) w dużej mierze pokrywa się z że z Abstract Factory. Z tego powodu prezentacja w tym rozdziale skupia się na podejściu, które stało się popularne od tamtego czasu.

Coraz popularniejsza definicja fabryki metoda to: a static metoda klasy, która zwraca obiekt tej klasy typu. Jednak w przeciwieństwie do konstruktora, rzeczywisty obiekt, który zwraca, może być instancją podklasy. Konstruktor Unlikea, istniejący obiekt może zostać ponownie użyty zamiast nowo utworzonego obiektu. W przeciwieństwie do konstruktora, metody fabryczne mogą mieć inne i bardziej opisowe nazwy (np. Color.make_RGB_color(float red, float green, float blue) i Color.make_HSB_color(float hue, float saturation, float brightness)

Klient jest całkowicie oddzielony od szczegółów implementacji klas pochodnych. Teraz możliwe jest tworzenie polimorficzne.

Przykład

Metoda Factory definiuje interfejs do tworzenia obiektów, ale pozwala podklasom decydować, które klasy mają zostać utworzone. Formowanie wtryskowe demonstruje to wzór. Producenci zabawek z tworzyw sztucznych przetwarzają proszek do formowania tworzyw sztucznych i wtryskują go do form o pożądanych kształtach. Klasę zabawki (samochód, figurka itp.) Określa forma.

Lista kontrolna

  1. Jeśli masz hierarchię dziedziczenia, która ćwiczy polimorfizm, rozważ dodanie możliwości tworzenia polimorfii przez zdefiniowanie metody fabrycznej static w klasie bazowej.
  2. Zaprojektuj argumenty zgodnie z metodą fabryczną. Jakie cechy lub cechy są niezbędne i wystarczające do zidentyfikowania właściwej klasy pochodnej do utworzenia instancji?
  3. Rozważ zaprojektowanie wewnętrznej „puli obiektów”, która pozwoli na ponowne wykorzystanie obiektów zamiast tworzenia ich od podstaw.
  4. Rozważ tworzenie wszystkich konstruktorów private lub protected.

Ogólne zasady

  • Klasy Abstract Factory są często implementowane za pomocą metod Factory, ale można je zaimplementować za pomocą Prototype.
  • Metody fabryczne są zwykle wywoływane w ramach metod szablonu.
  • Metoda fabryczna: tworzenie przez dziedziczenie . Prototyp: tworzenie poprzez delegowanie.
  • Często projekty zaczynają się przy użyciu metody fabrycznej (mniej skomplikowanej, bardziej konfigurowalnej, mnożą się podklasy) i ewoluują w kierunku AbstractFactory, Prototype lub Builder (bardziej elastycznego, bardziej złożonego), gdy projektant odkrywa, gdzie więcej potrzebna jest elastyczność.
  • Prototyp nie wymaga podklasy, ale wymaga operacji inicjalizacji. Metoda fabryczna wymaga podklasy, ale jej nie wymaga.
  • Zaletą metody Factory jest że może zwrócić tę samą instancję wiele razy, lub może zwrócić podklasę, a nie obiekt tego dokładnego typu.
  • Niektórzy zwolennicy metody fabrycznej zalecają, aby w ramach projektu języka (lub w przypadku niepowodzenia, ze względu na styl ) absolutnie wszyscy konstruktorzy powinni być prywatni lub chronieni. Nie jest sprawą nikogo innego, czy klasa wytwarza nowy obiekt, czy też przerabia stary.
  • Operator new uważa się za szkodliwy. Istnieje różnica między żądaniem obiektu a jego utworzeniem. Operator new zawsze tworzy obiekt i nie udaje mu się hermetyzować tworzenia obiektu.Metoda fabryki wymusza tę hermetyzację i umożliwia żądanie obiektu bez nierozłącznego łączenia się z aktem tworzenia.

Wesprzyj naszą bezpłatną witrynę i posiadaj e-booka!

  • 22 wzorce projektowe i 8 szczegółowo wyjaśnionych zasad
  • 406 dobrze skonstruowanych, czytelnych i pozbawionych żargonu stron
  • 228 przejrzystych i pomocnych ilustracji i diagramów
  • Archiwum z przykładami kodu w 4 językach
  • Obsługiwane wszystkie urządzenia: formaty EPUB / MOBI / PDF

Dowiedz się więcej …

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *