logo

Wzorzec projektowy metody fabrycznej w Javie

To jest twórczy wzór projektowy który mówi o stworzeniu obiektu. Wzorzec projektowy fabryki mówi, aby zdefiniować interfejs (interfejs Java lub klasa abstrakcyjna) do tworzenia obiektu i pozwolić podklasom zdecydować, która klasa ma zostać utworzona.

metoda fabryczna



Ważne tematy dotyczące wzorca projektowego metody Factory w Javie

Jaki jest wzorzec projektowy metody fabrycznej w Javie?

Wzorzec projektowy metody fabrycznej definiuje interfejs do tworzenia obiektu, ale niech podklasa decyduje, która klasa ma zostać utworzona. Metoda fabryczna pozwala klasie odroczyć utworzenie instancji do podklasy.

Czym jest metoda fabryczna-wzorzec projektowy



Poniżej znajduje się wyjaśnienie powyższego obrazu:

  • Metoda fabryczna w interfejsie pozwala klasie odroczyć utworzenie instancji do jednej lub większej liczby konkretnych podklas.
  • Ponieważ te wzorce projektowe mówią o tworzeniu obiektu, należą one do kategorii kreacyjnego wzorca projektowego.
  • Jeśli zauważymy nazwę Metoda fabryczna , co oznacza, że ​​istnieje metoda, która jest fabryką i ogólnie rzecz biorąc, fabryki zajmują się tworzeniem, a tutaj za pomocą tego tworzony jest obiekt.
  • Jest to jeden z najlepszych sposobów tworzenia obiektu, w którym logika tworzenia obiektu jest ukryta przed klientem. Przyjrzyjmy się teraz implementacji.

Kiedy używać wzorca projektowego metody fabrycznej w Javie?

Wzorzec projektowy metody fabrycznej można zastosować w Javie w następujących przypadkach:

  • Klasa nie jest w stanie przewidzieć typu obiektów, które ma utworzyć.
  • Klasa chce, aby jej podklasy określały obiekty, które tworzy.
  • Klasy delegują odpowiedzialność do jednej z wielu podklas pomocniczych, a Twoim celem jest przechowywanie informacji o tym, która podklasa pomocnicza jest delegatem w określonym zakresie lub lokalizacji.

Kluczowe elementy wzorca projektowego metody fabrycznej

Kluczowy składnik metody fabrycznej wzorca projektowania w Javie



Produkt

  • Jest to klasa abstrakcyjna lub interfejs, który definiuje typowe operacje dla obiektów, które utworzy fabryka.
  • Produkty betonowe to rzeczywiste klasy implementujące interfejs produktu, z których każda reprezentuje określony typ obiektu, który ma zostać utworzony.

Twórca

  • Jest to klasa abstrakcyjna lub interfejs, który deklaruje metodę fabryczną.
  • Metoda ta odpowiada za tworzenie obiektów Product, ale faktyczne tworzenie deleguje do podklas.

Twórcy betonu

  • Są to podklasy Creatora, które implementują metodę fabryczną.
  • Decydują, który konkretny produkt betonowy utworzyć, często w oparciu o parametry wejściowe lub konfigurację.

Metoda fabryczna

  • Jest to metoda zdefiniowana w klasie Creator, która odpowiada za tworzenie obiektów Product.
  • Zwykle jest deklarowany jako abstrakcyjny w Kreatorze i implementowany w Konkretnych Kreatorach.

Przykład wzorca projektowego metody fabrycznej w Javie

Oświadczenie o problemie

Tworzysz system oprogramowania dla platformy e-commerce, która zajmuje się różnego rodzaju produktami. Każda kategoria produktu (np. elektronika, odzież, książki) wymaga specyficznego podejścia podczas tworzenia. Jednakże chcesz oddzielić kod klienta od logiki tworzenia konkretnego produktu, aby zwiększyć elastyczność i łatwość konserwacji. Dodatkowo chcesz umożliwić łatwą rozbudowę poprzez dodawanie w przyszłości nowych typów produktów bez modyfikowania istniejącego kodu.

Rozwiązanie wykorzystujące klasę abstrakcyjną

Powyższy problem można rozwiązać za pomocą wzorca projektowego metody fabrycznej:

Jawa




// Abstract Product Class> abstract> class> Product {> >public> abstract> void> display();> }> // Concrete Products> class> ConcreteProductA>extends> Product {> >@Override> >public> void> display() {> >System.out.println(>'This is Concrete Product A.'>);> >}> }> class> ConcreteProductB>extends> Product {> >@Override> >public> void> display() {> >System.out.println(>'This is Concrete Product B.'>);> >}> }> // Creator Abstract Class> abstract> class> Creator {> >public> abstract> Product factoryMethod();> }> // Concrete Creators> class> ConcreteCreatorA>extends> Creator {> >@Override> >public> Product factoryMethod() {> >return> new> ConcreteProductA();> >}> }> class> ConcreteCreatorB>extends> Creator {> >@Override> >public> Product factoryMethod() {> >return> new> ConcreteProductB();> >}> }> // Client Code> public> class> FactoryMethodExample {> >public> static> void> main(String[] args) {> >Creator creatorA =>new> ConcreteCreatorA();> >Product productA = creatorA.factoryMethod();> >productA.display();> >Creator creatorB =>new> ConcreteCreatorB();> >Product productB = creatorB.factoryMethod();> >productB.display();> >}> }>

normalizacja w bazie danych

>

>

Wyjście

This is Concrete Product A. This is Concrete Product B.>

Rozwiązanie wykorzystujące interfejs

Powyższy problem można rozwiązać za pomocą wzorca projektowego metody fabrycznej:

Jawa




// Product Interface> interface> Product {> >void> display();> }> // Concrete Products> class> ConcreteProductA>implements> Product {> >@Override> >public> void> display() {> >System.out.println(>'This is Concrete Product A.'>);> >}> }> class> ConcreteProductB>implements> Product {> >@Override> >public> void> display() {> >System.out.println(>'This is Concrete Product B.'>);> >}> }> // Factory Interface> interface> Factory {> >Product factoryMethod();> }> // Concrete Factories> class> ConcreteFactoryA>implements> Factory {> >@Override> >public> Product factoryMethod() {> >return> new> ConcreteProductA();> >}> }> class> ConcreteFactoryB>implements> Factory {> >@Override> >public> Product factoryMethod() {> >return> new> ConcreteProductB();> >}> }> // Client Code> public> class> FactoryMethodExample {> >public> static> void> main(String[] args) {> >Factory factoryA =>new> ConcreteFactoryA();> >Product productA = factoryA.factoryMethod();> >productA.display();> >Factory factoryB =>new> ConcreteFactoryB();> >Product productB = factoryB.factoryMethod();> >productB.display();> >}> }>

>

lista do tablicy Java
>

Wyjście

This is Concrete Product A. This is Concrete Product B.>

Przypadki użycia wzorca projektowego metody fabrycznej w Javie

Oto kilka typowych zastosowań wzorca Factory Method Design w Javie:

  • Ramy twórcze:
    • JDBC (Java Database Connectivity) szeroko wykorzystuje fabryki do tworzenia połączeń, instrukcji i zestawów wyników. Frameworki wstrzykiwania zależności, takie jak Spring i Guice, w dużym stopniu opierają się na fabrykach do tworzenia komponentów bean i zarządzania nimi.
  • Zestawy narzędzi GUI:
    • Swing i JavaFX wykorzystują fabryki do tworzenia komponentów interfejsu użytkownika, takich jak przyciski, pola tekstowe i etykiety, co pozwala na dostosowywanie i elastyczność projektowania interfejsu użytkownika.
  • Ramy rejestrowania:
    • Struktury rejestrowania, takie jak Log4j i Logback, wykorzystują fabryki do tworzenia rejestratorów o różnych konfiguracjach, umożliwiając kontrolę nad poziomami rejestrowania i miejscami docelowymi danych wyjściowych.
  • Serializacja i deserializacja:
    • Struktury serializacji obiektów często wykorzystują fabryki do tworzenia obiektów na podstawie serializowanych danych, obsługując różne formaty serializacji i wersjonowanie.
  • Systemy wtyczek:
    • Systemy oparte na wtyczkach często korzystają z fabryk do dynamicznego ładowania i tworzenia instancji wtyczek, co pozwala na rozszerzalność i dostosowywanie.
  • Produkcja gier:
    • Silniki gier często wykorzystują fabryki do tworzenia różnych typów obiektów, postaci i poziomów gier, promując organizację kodu i elastyczność.
  • Tworzenie stron internetowych:
    • Struktury internetowe czasami wykorzystują fabryki do tworzenia komponentów widoków, kontrolerów i usług, umożliwiając modułowość i testowalność w aplikacjach internetowych.

Zalety wzorca projektowego metody fabrycznej w Javie

Zalety wzorca projektowego metody fabrycznej w Javie to:

  • Odsprzęganie: Oddziela logikę tworzenia obiektów od kodu klienta korzystającego z tych obiektów. Dzięki temu kod jest bardziej elastyczny i łatwiejszy w utrzymaniu, ponieważ zmiany w procesie tworzenia nie wymagają modyfikacji kodu klienta.
  • Rozciągliwość: Wprowadzanie nowych typów produktów jest łatwe bez zmiany kodu klienta. Wystarczy utworzyć nową podklasę Concrete Creator i wdrożyć metodę fabryczną, aby wyprodukować nowy produkt.
  • Testowalność: Upraszcza testowanie jednostkowe, umożliwiając wyśmiewanie lub pomijanie procesu tworzenia produktu podczas testów. Możesz testować różne implementacje produktów w izolacji, bez polegania na rzeczywistym tworzeniu obiektów.
  • Możliwość ponownego wykorzystania kodu: Metodę fabryczną można ponownie wykorzystać w różnych częściach aplikacji, gdzie potrzebne jest utworzenie obiektu. Promuje to centralizację i ponowne wykorzystanie logiki tworzenia obiektów.
  • Kapsułkowanie: Ukrywa konkretne klasy produktów przed kodem klienta, czyniąc kod mniej zależnym od konkretnych implementacji. Poprawia to łatwość konserwacji i zmniejsza sprzężenie.

Wady wzorca projektowego metody fabrycznej w Javie

Wady wzorca projektowego metody fabrycznej w Javie to:

  • Zwiększona złożoność: Wprowadza dodatkowe klasy i interfejsy, dodając warstwę abstrakcji, która może sprawić, że kod będzie bardziej skomplikowany w zrozumieniu i utrzymaniu, szczególnie dla osób niezaznajomionych ze wzorcem.
  • Nad głową: Użycie polimorfizmu i wiązania dynamicznego może nieznacznie wpłynąć na wydajność, chociaż w większości zastosowań jest to często nieistotne.
  • Ścisłe powiązanie w ramach hierarchii produktów: Twórcy betonu są nadal ściśle powiązani z odpowiadającymi im produktami betonowymi. Zmiany w jednym często pociągają za sobą konieczność zmiany w drugim.
  • Zależność od podklas betonowych: Kod klienta w dalszym ciągu zależy od abstrakcyjnej klasy Creator, co wymaga znajomości jej konkretnych podklas w celu prawidłowego wywołania metod fabrycznych.
  • Możliwość nadmiernego użycia: Ważne jest, aby używać wzorca Metody fabrycznej w sposób rozsądny, aby uniknąć nadmiernego projektowania aplikacji. Proste tworzenie obiektów często można wykonać bezpośrednio, bez potrzeby tworzenia fabryki.
  • Wyzwania testowe: Testowanie samej logiki fabrycznej może być bardziej złożone.

Wniosek

Do tej pory dowiedzieliśmy się czym jest wzorzec projektowy metody fabrycznej i jak go wdrożyć. Wierzę, że teraz w pełni rozumiemy zalety tego mechanizmu projektowego. Metody fabryczne przenikają zestawy narzędzi i frameworki. Powyższy przykład dokumentu jest typowym zastosowaniem w MacApp i ET++.

Czytaj dalej : Samouczek dotyczący wzorców projektowych w Javie