Je to a kreatívny dizajnový vzor ktorý hovorí o vytvorení objektu. Továrenský návrhový vzor hovorí, že treba definovať rozhranie (rozhranie java alebo abstraktnú triedu) na vytvorenie objektu a nechať podtriedy rozhodnúť, ktorú triedu inštanciovať.
Dôležité témy pre návrhový vzor metódy Factory v Jave
- Aký je vzor návrhu továrenskej metódy v jazyku Java?
- Kedy použiť návrhový vzor továrenskej metódy v jazyku Java?
- Kľúčové komponenty vzoru továrenskej metódy
- Príklad vzoru návrhu továrenskej metódy v jazyku Java
- Prípady použitia návrhového vzoru továrenskej metódy v jazyku Java
- Výhody vzoru návrhu továrenskej metódy v jazyku Java
- Nevýhody návrhového vzoru továrenskej metódy v Jave
Aký je vzor návrhu továrenskej metódy v jazyku Java?
Vzor továrenského návrhu metódy definuje rozhranie na vytváranie objektu, ale nechajte podtriedu rozhodnúť, ktorú triedu vytvoríte. Továrenská metóda umožňuje triede odložiť inštanciu na podtriedu.
Nižšie je vysvetlenie vyššie uvedeného obrázka:
- Továrenská metóda v rozhraní umožňuje triede odložiť vytvorenie jednej alebo viacerých konkrétnych podtried.
- Keďže tieto návrhové vzory hovoria o vytvorení objektu, spadajú do kategórie tvorivých návrhových vzorov.
- Ak si všimneme meno Továrenská metóda , to znamená, že existuje metóda, ktorou je továreň a vo všeobecnosti sa továrne zaoberajú tvorivými vecami a tu sa vytvára objekt.
- Je to jeden z najlepších spôsobov, ako vytvoriť objekt, kde je logika vytvárania objektu pred klientom skrytá. Teraz sa pozrime na implementáciu.
Kedy použiť návrhový vzor továrenskej metódy v jazyku Java?
Vzor návrhu továrenskej metódy možno použiť v jazyku Java v nasledujúcich prípadoch:
- Trieda nemôže predpovedať typ objektov, ktoré potrebuje vytvoriť.
- Trieda chce, aby jej podtriedy špecifikovali objekty, ktoré vytvára.
- Triedy delegujú zodpovednosť na jednu z viacerých pomocných podtried a vy sa snažíte uchovávať informácie o tom, ktorá pomocná podtrieda je delegátom, v špecifickom rozsahu alebo umiestnení.
Kľúčové komponenty vzoru továrenskej metódy
Produkt
- Je to abstraktná trieda alebo rozhranie, ktoré definuje bežné operácie pre objekty, ktoré továreň vytvorí.
- Konkrétne produkty sú skutočné triedy, ktoré implementujú rozhranie produktu, pričom každá predstavuje špecifický typ objektu, ktorý sa má vytvoriť.
Tvorca
- Je to abstraktná trieda alebo rozhranie, ktoré deklaruje továrenskú metódu.
- Táto metóda je zodpovedná za vytváranie objektov produktu, ale deleguje skutočné vytváranie na podtriedy.
Tvorcovia betónu
- Toto sú podtriedy Tvorcu, ktoré implementujú továrenskú metódu.
- Rozhodujú, ktorý konkrétny betónový výrobok vytvoria, často na základe vstupných parametrov alebo konfigurácie.
Továrenská metóda
- Je to metóda definovaná v triede Creator, ktorá je zodpovedná za vytváranie objektov produktu.
- Zvyčajne je deklarovaný ako abstraktný v Creator a implementovaný v Concrete Creators.
Príklad vzoru návrhu továrenskej metódy v jazyku Java
Vyhlásenie o probléme
Vyvíjate softvérový systém pre platformu elektronického obchodu, ktorý sa zaoberá rôznymi typmi produktov. Každá kategória produktov (napr. elektronika, oblečenie, knihy) vyžaduje špecifické zaobchádzanie počas vytvárania. Chcete však oddeliť kód klienta od logiky vytvárania konkrétneho produktu, aby ste zvýšili flexibilitu a udržiavateľnosť. Okrem toho chcete umožniť jednoduché rozšírenie pridaním nových typov produktov v budúcnosti bez úpravy existujúceho kódu.
Riešenie pomocou abstraktnej triedy
Vyššie uvedený problém možno vyriešiť pomocou vzoru návrhu továrenskej metódy:
Java
java slučky
// 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ýkon
This is Concrete Product A. This is Concrete Product B.>
Riešenie pomocou rozhrania
Vyššie uvedený problém možno vyriešiť pomocou vzoru návrhu továrenskej metódy:
Java
pridávanie reťazcov java
// 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ýkon
This is Concrete Product A. This is Concrete Product B.>
Prípady použitia návrhového vzoru továrenskej metódy v jazyku Java
Tu sú niektoré bežné aplikácie vzoru Factory Method Design v jazyku Java:
- Tvorivé rámce:
- JDBC (Java Database Connectivity) vo veľkej miere využíva továrne na vytváranie spojení, príkazov a sád výsledkov. Rámce na vstrekovanie závislostí, ako sú Spring a Guice, sa pri vytváraní a správe fazuľiek vo veľkej miere spoliehajú na továrne.
- GUI Toolkity:
- Swing a JavaFX používajú továrne na vytváranie komponentov používateľského rozhrania, ako sú tlačidlá, textové polia a štítky, čo umožňuje prispôsobenie a flexibilitu návrhu používateľského rozhrania.
- Logovacie rámce:
- Logovacie rámce ako Log4j a Logback využívajú továrne na vytváranie loggerov s rôznymi konfiguráciami, čo umožňuje kontrolu nad úrovňami protokolovania a výstupnými cieľmi.
- Serializácia a deserializácia:
- Rámce serializácie objektov často používajú továrne na vytváranie objektov zo serializovaných údajov, ktoré podporujú rôzne formáty serializácie a verzovanie.
- Systémy doplnkov:
- Systémy založené na doplnkoch často používajú továrne na dynamické načítanie a vytváranie inštancií doplnkov, čo umožňuje rozšíriteľnosť a prispôsobenie.
- Vývoj hry:
- Herné motory často využívajú továrne na vytváranie rôznych typov herných objektov, postáv a úrovní, čím podporujú organizáciu kódu a flexibilitu.
- Vývoj webových aplikácií:
- Webové rámce niekedy používajú továrne na vytváranie komponentov zobrazenia, ovládačov a služieb, čo umožňuje modularitu a testovateľnosť webových aplikácií.
Výhody vzoru návrhu továrenskej metódy v jazyku Java
Výhody vzoru Factory Method Design Pattern v jazyku Java sú:
- Oddelenie: Oddeľuje logiku vytvárania objektov od klientskeho kódu, ktorý tieto objekty používa. Vďaka tomu je kód flexibilnejší a udržiavateľný, pretože zmeny v procese vytvárania si nevyžadujú úpravy kódu klienta.
- Rozšíriteľnosť: Zavádzanie nových typov produktov je jednoduché bez zmeny kódu klienta. Jednoducho potrebujete vytvoriť novú podtriedu Concrete Creator a implementovať továrenskú metódu na výrobu nového produktu.
- Testovateľnosť: Zjednodušuje testovanie jednotiek tým, že vám umožňuje zosmiešňovať alebo zamlčovať vytváranie produktov počas testov. Môžete testovať rôzne implementácie produktu izolovane bez toho, aby ste sa spoliehali na skutočné vytváranie objektov.
- Opätovná použiteľnosť kódu: Továrenskú metódu možno opätovne použiť v rôznych častiach aplikácie, kde je potrebné vytvoriť objekt. To podporuje centralizáciu a opätovné použitie logiky vytvárania objektov.
- Zapuzdrenie: Skryje konkrétne triedy produktov z kódu klienta, čím sa kód stáva menej závislým od konkrétnych implementácií. To zlepšuje udržiavateľnosť a znižuje spojenie.
Nevýhody návrhového vzoru továrenskej metódy v Jave
Nevýhody Factory Method Design Pattern v Jave sú:
- Zvýšená zložitosť: Zavádza ďalšie triedy a rozhrania a pridáva vrstvu abstrakcie, vďaka ktorej je kód zložitejší na pochopenie a údržbu, najmä pre tých, ktorí tento vzor nepoznajú.
- Režijné náklady: Použitie polymorfizmu a dynamickej väzby môže mierne ovplyvniť výkon, aj keď je to vo väčšine aplikácií často zanedbateľné.
- Tesné prepojenie v rámci produktových hierarchií: Concrete Creators sú stále pevne spojené s príslušnými betónovými produktmi. Zmeny v jednom si často vyžadujú zmeny v druhom.
- Závislosť na podtriedach betónu: Kód klienta stále závisí od abstraktnej triedy Creator, ktorá vyžaduje znalosť jej konkrétnych podtried, aby bolo možné správne volať metódu továrne.
- Potenciál nadmerného používania: Je dôležité používať vzor továrenskej metódy uvážlivo, aby ste predišli nadmernému inžinierstvu aplikácie. Jednoduché vytváranie objektov sa dá často zvládnuť priamo bez potreby továrne.
- Testovacie výzvy: Testovanie samotnej továrenskej logiky môže byť zložitejšie.
Záver
Doteraz sme sa naučili, čo je továrenský návrhový vzor metódy a ako ho implementovať. Verím, že teraz dobre chápeme výhody tohto konštrukčného mechanizmu. Továrenské metódy prenikajú do nástrojov a rámcov. Predchádzajúci príklad dokumentu je typickým použitím v MacApp a ET++.
Čítajte ďalej : Výukový program návrhových vzorov Java