logo

Návrhový vzor tovární metody v Javě

Je to a kreativní designový vzor že mluví o vytvoření objektu. Tovární návrhový vzor říká, že je třeba definovat rozhraní (rozhraní Java nebo abstraktní třídu) pro vytvoření objektu a nechat podtřídy rozhodnout, kterou třídu vytvoří.

tovární metoda



Důležitá témata pro návrhový vzor metody Factory v Javě

java kolekce java

Jaký je vzor návrhu továrních metod v Javě?

Factory Method Design Pattern definuje rozhraní pro vytváření objektu, ale nechte podtřídu rozhodnout, kterou třídu vytvoří. Factory Method umožňuje třídě odložit konkretizaci na podtřídu.

Co-je-Factory-Metoda-Design-Pattern



Níže je vysvětlení výše uvedeného obrázku:

  • Tovární metoda v rozhraní umožňuje třídě odložit vytvoření jedné nebo více konkrétních podtříd.
  • Protože tyto návrhové vzory hovoří o vytvoření instance objektu, spadají do kategorie kreativních návrhových vzorů.
  • Pokud si všimneme názvu Tovární metoda , to znamená, že existuje metoda, která je továrna a obecně se továrny zabývají tvorbou a zde se vytváří objekt.
  • Je to jeden z nejlepších způsobů, jak vytvořit objekt, kde je logika vytváření objektů před klientem skryta. Nyní se podívejme na implementaci.

Kdy použít Factory Method Design Pattern v Javě?

Návrhový vzor tovární metody lze v jazyce Java použít v následujících případech:

  • Třída nemůže předvídat typ objektů, které potřebuje vytvořit.
  • Třída chce, aby její podtřídy určovaly objekty, které vytváří.
  • Třídy delegují odpovědnost na jednu z více pomocných podtříd a vy se snažíte uchovávat informace o tom, která pomocná podtřída je delegátem, v určitém rozsahu nebo umístění.

Klíčové součásti vzoru návrhu tovární metody

Klíčová-komponenta-výrobní-metody-Design-Pattern-in-Java



Produkt

  • Je to abstraktní třída nebo rozhraní, které definuje běžné operace pro objekty, které továrna vytvoří.
  • Konkrétní produkty jsou skutečné třídy, které implementují rozhraní produktu, z nichž každá představuje určitý typ objektu, který má být vytvořen.

Tvůrce

  • Je to abstraktní třída nebo rozhraní, které deklaruje tovární metodu.
  • Tato metoda je zodpovědná za vytváření objektů Product, ale deleguje skutečné vytváření na podtřídy.

Tvůrci betonu

  • Toto jsou podtřídy Tvůrce, které implementují tovární metodu.
  • Rozhodují, který konkrétní betonový výrobek vytvořit, často na základě vstupních parametrů nebo konfigurace.

Tovární metoda

  • Je to metoda definovaná ve třídě Creator, která je zodpovědná za vytváření objektů Product.
  • Obvykle je deklarován jako abstraktní v Creator a implementován v Concrete Creators.

Příklad vzoru návrhu tovární metody v Javě

Problémové prohlášení

Vyvíjíte softwarový systém pro platformu e-commerce, která se zabývá různými typy produktů. Každá kategorie produktů (např. elektronika, oblečení, knihy) vyžaduje specifické zacházení při vytváření. Chcete však oddělit kód klienta od logiky vytváření konkrétního produktu, abyste zvýšili flexibilitu a udržovatelnost. Kromě toho chcete umožnit snadné rozšíření přidáním nových typů produktů v budoucnu bez úpravy stávajícího kódu.

Řešení pomocí abstraktní třídy

Výše uvedený problém lze vyřešit pomocí vzoru Factory Method Design Pattern:

Jáva

řazení java pole




// 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();> >}> }>

>

>

výběr řazení
Výstup

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

Řešení pomocí rozhraní

Výše uvedený problém lze vyřešit pomocí vzoru Factory Method Design Pattern:

Jáva


příklady java kódu



// 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();> >}> }>

>

>

Výstup

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

Případy použití návrhového vzoru tovární metody v Javě

Zde jsou některé běžné aplikace vzoru Factory Method Design v Javě:

disketa
  • Tvůrčí rámce:
    • JDBC (Java Database Connectivity) široce využívá továrny pro vytváření připojení, příkazů a sad výsledků. Rámce pro vkládání závislostí jako Spring a Guice se při vytváření a správě fazolí do značné míry spoléhají na továrny.
  • GUI Toolkits:
    • Swing a JavaFX využívají továrny k vytváření komponent uživatelského rozhraní, jako jsou tlačítka, textová pole a štítky, což umožňuje přizpůsobení a flexibilitu návrhu uživatelského rozhraní.
  • Logovací rámce:
    • Logovací rámce jako Log4j a Logback využívají továrny k vytváření loggerů s různými konfiguracemi, což umožňuje kontrolu nad úrovněmi protokolování a výstupními cíli.
  • Serializace a deserializace:
    • Rámce serializace objektů často používají továrny k vytváření objektů ze serializovaných dat, které podporují různé formáty serializace a verzování.
  • Systémy pluginů:
    • Systémy založené na zásuvných modulech často používají továrny k dynamickému načítání a vytváření instancí zásuvných modulů, což umožňuje rozšiřitelnost a přizpůsobení.
  • Vývoj hry:
    • Herní enginy často využívají továrny k vytváření různých typů herních objektů, postav a úrovní, což podporuje organizaci kódu a flexibilitu.
  • Vývoj webu:
    • Webové rámce někdy používají továrny k vytváření komponent zobrazení, řadičů a služeb, což umožňuje modularitu a testovatelnost webových aplikací.

Výhody vzoru Factory Method Design Pattern v Javě

Výhody Factory Method Design Pattern v Javě jsou:

  • Oddělení: Odděluje logiku vytváření objektů od klientského kódu, který tyto objekty používá. Díky tomu je kód flexibilnější a udržovatelný, protože změny v procesu vytváření nevyžadují úpravy kódu klienta.
  • Rozšiřitelnost: Je snadné zavádět nové typy produktů bez změny klientského kódu. Jednoduše potřebujete vytvořit novou podtřídu Concrete Creator a implementovat tovární metodu pro výrobu nového produktu.
  • Testovatelnost: Zjednodušuje testování jednotek tím, že vám během testů umožňuje zesměšňovat nebo potlačovat vytváření produktů. Můžete testovat různé implementace produktu izolovaně, aniž byste se spoléhali na skutečné vytváření objektů.
  • Znovupoužitelnost kódu: Tovární metodu lze znovu použít v různých částech aplikace, kde je potřeba vytvořit objekt. To podporuje centralizaci a opětovné použití logiky vytváření objektů.
  • Zapouzdření: Skrývá konkrétní třídy produktů před klientským kódem, takže kód je méně závislý na konkrétních implementacích. To zlepšuje udržovatelnost a snižuje spojování.

Nevýhody návrhového vzoru továrních metod v Javě

Nevýhody Factory Method Design Pattern v Javě jsou:

  • Zvýšená složitost: Zavádí další třídy a rozhraní a přidává vrstvu abstrakce, díky níž je kód složitější na pochopení a údržbu, zejména pro ty, kteří tento vzor neznají.
  • Režie: Použití polymorfismu a dynamické vazby může mírně ovlivnit výkon, i když to je ve většině aplikací často zanedbatelné.
  • Těsné propojení v rámci produktových hierarchií: Concrete Creators jsou stále pevně spojeni s příslušnými betonovými produkty. Změny jednoho často vyžadují změny druhého.
  • Závislost na betonových podtřídách: Klientský kód stále závisí na abstraktní třídě Creator a vyžaduje znalost jejích konkrétních podtříd, aby bylo možné správně volat tovární metodu.
  • Potenciál nadužívání: Je důležité používat vzor tovární metody uvážlivě, abyste se vyhnuli nadměrnému inženýrství aplikace. Jednoduché vytváření objektů lze často zvládnout přímo bez potřeby továrny.
  • Testovací výzvy: Samotné testování tovární logiky může být složitější.

Závěr

Doposud jsme se dozvěděli, co je návrhový vzor Factory method a jak jej implementovat. Věřím, že nyní dobře rozumíme výhodám tohoto konstrukčního mechanismu. Tovární metody prostupují sady nástrojů a rámce. Předchozí příklad dokumentu je typickým použitím v MacApp a ET++.

Dále Číst : Výukový program návrhových vzorů Java