design patterns java
V tomto výučbe sa budeme zaoberať návrhovými vzormi v Jave. Budeme študovať vzory Singleton, Factory a Builder s príkladmi a výhodami:
Keď riešime konkrétny problém, môžeme ho vyriešiť efektívnejšie, ak už máme definované niektoré osvedčené postupy. To nám skutočne pomôže dodržiavať tieto najlepšie postupy a vyvíjať spoľahlivejšie riešenia.
Títo osvedčené postupy ktoré sa dajú použiť na vývoj osvedčené riešenia na riešenie problémov sa nazývajú „ Dizajnové vzory “. Skúsení vývojári softvéru OOP používajú na riešenie konkrétnych úloh návrhové vzory.
=> Tu si pozrite príručku Java Beginners Guide
Čo sa dozviete:
Dizajnové vzory v Jave
Dizajnové vzory prvýkrát vymyslel Christopher Alexander v roku 1977. Neskôr však štyria vývojári, menovite Erich Gamma, Richard Helm, John Vlissides a Ralph Johnson, napísali knihu s názvom „ Gang vzorov štyroch návrhov, prvky opakovane použiteľného objektovo orientovaného softvéru ”V roku 1995.
Odvtedy boli všetky dizajnové vzory známe ako „ Gang štyroch dizajnových vzorov “.
zadarmo softvér na kopírovanie DVD pre Mac
Dizajnové vzory sú nezávislé od akýchkoľvek programovacích jazykov, pretože sa používajú na riešenie bežných objektovo-orientovaných problémov s dizajnom a neobmedzujú sa iba na konkrétny programovací jazyk. V podstate je to teda nápad, a nie implementácia.
Pomocou návrhových vzorov teda môžeme vyvíjať programy, ktoré sú efektívnejšie, flexibilnejšie, udržiavateľnejšie a opakovane použiteľné.
Výhody dizajnových vzorov
Nižšie sú uvedené niektoré výhody použitia návrhových vzorov v našich aplikáciách:
- Dizajnové vzory sú opakovane použiteľné a môžu byť použité vo viacerých projektoch.
- Architektúru systému môžeme definovať pomocou návrhových vzorov.
- Dizajnové vzory poskytujú priehľadnosť návrhu aplikácie.
- Dizajnové vzory sú už dobre odskúšané a overené, aby sme ich mohli bez obáv použiť.
- Dizajnové vzory nám umožňujú budovať lepšie systémy a tiež poskytujú jasnosť v architektúre systému.
Kedy použiť návrhové vzory
Kedy by sme teda mali presne použiť návrhové vzory?
Zvyčajne používame návrhový vzor počas počiatočnej fázy analýzy a požiadaviek SDLC (Software Development Life Cycle). Ak sa použije počas fázy analýzy a požiadaviek SDLC, poskytuje viac informácií k tejto fáze. Java interne podporuje návrhové vzory.
Dizajnové vzory v Jave sú kategorizované nasledovne:
Pokiaľ ide o tento tutoriál, zaujímajú nás iba kreačné návrhové vzory.
Tvorivé vzory návrhu sa ďalej klasifikujú takto:
V tomto tutoriáli sa budeme zaoberať nasledujúcimi návrhovými vzormi:
- Dizajnový vzor Singleton
- Továrenský návrhový vzor
- Návrhársky vzor staviteľa
Začnime samostatným návrhovým vzorom v Jave.
Odporúčané čítanie = >> Dizajnové vzory pre banky založené na aplikáciách
Singletonov vzor v Jave
Singleton pattern je typ kreačného vzoru v Jave. Singleton pattern je návrhový vzor, v ktorom je vo virtuálnom stroji Java prítomná iba jedna inštancia triedy. Trieda singleton (implementujúca vzor singleton) musí poskytnúť globálny prístupový bod, aby získala inštanciu triedy.
Inými slovami, singletonový vzor obmedzuje inštanciu triedy. Singletonov vzor sa používa pri implementácii loggeru pre aplikácie. Používa sa tiež pri implementácii fondu vlákien alebo pamäti cache.
Triedy Java, java.awt.Desktop a java.lang.runtime tiež použite singletonový vzor.
Výhody
- Pretože sa používa iba jedna inštancia triedy singleton, šetríme pamäť.
- Tiež zaisťuje opätovnú použiteľnosť, pretože sa opakovane používa ten istý singleton objekt.
Teraz prejdime k implementácii singletonového vzoru.
Implementácia Singletonovho vzoru
Ako už bolo spomenuté, singletonový vzor obmedzuje triedu iba s jednou inštanciou a tejto inštancii je pridelený globálny prístupový bod. To boli všetky triedy, ktoré odkazujú na ten istý objekt znova a znova.
Nasledujúci diagram UML vysvetľuje vzor Singleton.
Ako ukazuje vyššie uvedený diagram UML, trieda singleton má definovanú jednu inštanciu a pristupujeme k nej metódou getInstance (). Takže továreň na výrobu singletonov, ktorá je zodpovedná za vytváranie objektov, využíva metódu getInstance na opätovné vrátenie toho istého objektu (ktorý je v triede).
Ako teda implementujeme Singletonov vzor do programu?
Vytvárame singletonovú triedu a jej konštruktor máme ako „súkromný“, takže triedu nie je možné vytvoriť inštanciou. Potom vytvoríme súkromnú inštanciu tejto singleton triedy v samotnej triede. Potom máme špeciálnu verejnú metódu getInstance (), ktorá vracia singletonový objekt do vonkajšieho sveta.
Táto implementácia tejto triedy singleton, ako je vysvetlená vyššie, je uvedená v programe Java nižšie.
class SingletonObject { //create an object of SingletonObject private static SingletonObject instance = new SingletonObject(); //private constructor so that we cannot instantiate the class private SingletonObject(){} //returns the only available object public static SingletonObject getInstance(){ return instance; } public void printMessage(){ System.out.println('Hello from Singleton object!!!'); } } public class Main { public static void main(String() args) { //illegal statement because constructor is private //Compile Time Error: The constructor SingletonObject() is not visible //SingletonObject object = new SingletonObject(); //call getInstance to retrieve the object available from the class SingletonObject object = SingletonObject.getInstance(); //show the message object.printMessage(); } }
Výkon:
Teraz, ak skontrolujeme hlavnú metódu, všimnite si, že ak sa pokúsime vytvoriť objekt triedy singleton pomocou nového operátora, kompilátor dá chybu kompilácie (pozri komentovaný kód v hlavnej metóde). Objekt triedy singleton získame pomocou metódy getInstance () a potom ho môžeme ako obvykle použiť na prístup k metódam.
Továrenský vzor v Jave
Továrenský vzor sa v Jave nazýva aj „Factory Method pattern“ alebo „Virtual Constructor“. V tomto vzore vytvoríme rozhranie alebo abstraktnú triedu s deklaráciami metód a potom sú za vytvorenie inštancií triedy zodpovedné konkrétne triedy alebo podtriedy implementujúce toto rozhranie alebo dediace triedu.
Výhody
- Továrenský vzor je typom kreačného vzoru a je najbežnejšie používaným vzorom v Jave.
- Použitím továrenského vzoru zabezpečujeme, aby logika skutočného stvorenia nebola vystavená vonkajšiemu svetu.
Takže ak má trieda implementujúca vzor továrne metódu na výpočet úrokovej sadzby, potom konkrétne triedy implementujú túto triedu a tiež implementujú metódu na výpočet úrokovej sadzby.
Potom bude existovať ďalšia trieda, ktorá je továrenskou triedou, ktorá bude mať prístup k týmto konkrétnym inštanciám triedy, aby sme si neboli vedomí toho, ako sa implementuje logika výpočtu úrokovej miery. Zavoláme iba metódu a dostaneme výstup.
Kedy presne teda môžeme použiť vzor Factory Method?
Keď sa nadradené triedy rozhodnú delegovať vytváranie inštancií na svoje podtriedy, môžeme ísť o továrenský vzor (je to vysvetlené vyššie). Továrenskú metódu môžeme použiť aj vtedy, keď trieda nevie, aké podtriedy sa majú vytvoriť.
Teraz sa pozrime na implementáciu vzoru továrenskej metódy.
Implementácia továrenského modelu
Ako príklad poďme implementovať všeobecné tvarové rozhranie. Z tohto rozhrania môžeme odvodiť rôzne triedy betónu, napríklad kruh, obdĺžnik atď. Potom budeme mať triedu shapeFactory, ktorá bude mať prístup k objektom konkrétnej triedy. UML pre tento vzor je uvedený nižšie.
Ako už bolo vysvetlené, toto je UML diagram pre továrenské vzory. Teraz implementujeme program Java, ktorý demonštruje továrenské vzorce.
//Geometric_shape interface interface Geometric_shape { void draw_shape(); } //Geometric shape classes implementing Geometric_shape interface class Rectangle implements Geometric_shape { @Override public void draw_shape() { System.out.println('Rectangle class::draw_shape() method.'); } } class Square implements Geometric_shape { @Override public void draw_shape() { System.out.println('Square class::draw_shape() method.'); } } class Circle implements Geometric_shape { @Override public void draw_shape() { System.out.println('Circle class::draw_shape() method.'); } } //Factory class for Geometric_shape class ShapeFactory { //shapeObject method gets particular shapeType (circle, Square or Rectangle) public Geometric_shape shapeObject(String shapeType){ if(shapeType == null){ return null; } //retrieve Circle object if(shapeType.equalsIgnoreCase('Circle')){ return new Circle(); //retrieve Rectangle object } else if(shapeType.equalsIgnoreCase('Rectangle')){ return new Rectangle(); ////retrieve Square object } else if(shapeType.equalsIgnoreCase('Square')){ return new Square(); } return null; } } public class Main { public static void main(String() args) { //Create a ShapeFactory object to get different geometric shapes ShapeFactory shapeFactory = new ShapeFactory(); //circle Geometric_shape shape_Circle = shapeFactory.shapeObject('CIRCLE'); //draw method of Circle shape_Circle.draw_shape(); //Rectangle Geometric_shape shape_Rectangle = shapeFactory.shapeObject('RECTANGLE'); //draw method of Rectangle shape_Rectangle.draw_shape(); //Square Geometric_shape shape_Square = shapeFactory.shapeObject('SQUARE'); //draw method of square shape_Square.draw_shape(); } }
Výkon:
Vzor staviteľa v Jave
Vo vzore Builder používame postupný postup na zostavenie zložitého objektu pomocou malých a jednoduchých objektov.
Takže kedykoľvek narazíme na objekt, ktorý sa nedá vytvoriť v jednom kroku, ideme po vzore staviteľa.
Výhody
- Pomocou vzoru Builder môžeme oddeliť konštrukciu a znázornenie objektu.
- Môžeme tiež zmeniť interné znázornenie objektu.
- Pomocou vzoru staviteľa môžeme zostaviť zložité návrhy ako celý doručovací systém.
Praktickým príkladom modelu Builder je systém objednávania potravín, ktorý zahŕňal zložité kroky zhromažďovania objednaných potravinových položiek, ich balenia, fakturácie, objednávky a následnej expedície.
V tomto tutoriále implementujeme príklad systému objednávania tabletov pomocou vzoru Builder.
Implementácia modelu staviteľa
Všeobecný diagram UML pre vzor Builder je uvedený nižšie.
Vyššie uvedený diagram zobrazuje diagram UML modelu Builder. Ako je zrejmé z vyššie uvedeného diagramu, vo vzore Builder máme štyri komponenty.
- Produkt: To predstavuje komplexný objekt, ktorý sa má postaviť.
- Trieda Builder Abstract: Abstraktná trieda obsahujúca prototypy všetkých funkcií potrebných na zostavenie zložitého objektu.
- ConcreteBuilder Class: Toto je konkrétna trieda, ktorá dedí z triedy Builder a vytvára konkrétny zložitý objekt. Môžeme mať toľko tried ConcreteBuilder, koľko potrebujeme.
- Trieda riaditeľa: Táto trieda riadi algoritmy, ktoré generujú konečný produkt.
Nasledujúci príklad programovania ukazuje demonštráciu modelu Builder pomocou systému na objednávanie tabletov.
import java.util.ArrayList; import java.util.List; //Packing interface for tablets interface Packing { public String pack(); public int price(); } //Tablet class - abstract abstract class Tablet implements Packing{ public abstract String pack(); } //company - extends Tablet abstract class Company extends Tablet{ public abstract int price(); } //Lenovo tablet class Lenovo extends Company{ @Override public int price(){ return 541; } @Override public String pack(){ return 'Lenovo Yoga'; } } //Micromax tablet class MicroMax extends Company { @Override public int price(){ return 338; } @Override public String pack(){ return 'MicroMax'; } } //Tablet type class TabType { private List items=new ArrayList(); //add items public void addItem(Packing packs) { items.add(packs); } //retrieve cost public void getCost(){ for (Packing packs : items) { packs.price(); } } //show all items public void showItems(){ for (Packing packing : items){ System.out.print('Tablet name : '+packing.pack()); System.out.println(', Price(in U.S.Dollars) : '+packing.price()); } } } //builder class for tablets order class TabBuilder { public TabType buildLenovoTab(){ TabType lenovo =new TabType(); lenovo.addItem(new Lenovo()); return lenovo; } public TabType buildMicroMaxTab(){ TabType mmx=new TabType(); mmx.addItem(new MicroMax()); return mmx; } } public class Main{ public static void main(String args()){ //build the tablets order and display the order TabBuilder tabBuilder=new TabBuilder(); TabType tabtype1=tabBuilder.buildLenovoTab(); tabtype1.showItems(); TabType tabtype2=tabBuilder.buildMicroMaxTab(); tabtype2.showItems(); } }
Výkon:
Vo vyššie uvedenom príklade sme vytvorili kompletný systém objednávania tabletov pre dve značky tabletov, tj. Lenovo a Micromax. Toto sú triedy concreteBuilder, ktoré dedia od spoločnosti abstraktných tried. Potom máme triedu TabBuilder, ktorá zostavuje objednávky pre obe triedy tabletov.
často kladené otázky
Otázka č. 1) Čo sú návrhové vzory v Jave? Aké sú typy návrhových vzorov v Jave?
java j2ee rozhovor otázky a odpovede
Odpoveď: Dizajnové vzory sú osvedčenými postupmi, ktoré možno použiť na vývoj osvedčených riešení.
Java má tri typy návrhových vzorov:
- Tvorivý návrhový vzor: Továrenský vzor, Abstraktný továrenský vzor, Singletonov vzor, Vzor staviteľa a prototypový vzor sú príkladmi vzorov tvorivých návrhov. Jedná sa hlavne o tvorbu objektov.
- Štrukturálny návrhový vzor: Väčšinou sa používajú na vytvorenie štruktúry triedy. Adaptér, most a kompozitný vzor sú populárne vzory štruktúrneho návrhu.
- Návrhový vzor správania: Poskytujú lepšiu interakciu medzi objektmi spolu s flexibilitou pre ľahké rozšírenie implementácie. Niektoré príklady vzorcov správania sú vzory pozorovateľov, stratégie atď.
Otázka 2) Prečo sa používajú dizajnové vzory?
Odpoveď: Dizajnové vzory nám poskytujú osvedčený a testovaný model riešenia, ktorý môžeme použiť na riešenie zložitých problémov. Dizajnové vzory nám umožňujú vytvárať súdržné moduly s voľnou spojkou. Dizajnové vzory tiež zefektívňujú a zefektívňujú interakciu medzi dizajnérmi.
Otázka č. 3) Aké sú príklady vzorov?
Odpoveď: Príklady prírodných vzorov sú viditeľné zákonitosti nachádzajúce sa v prírode. Prírodné vzory, ako sú symetrie, stromy, vlny, peny, pruhy, praskliny atď., Sú príkladmi prírodných vzorov.
Otázka č. 4) Je MVC dizajnovým vzorom?
Odpoveď: Áno, je to druh návrhového vzoru, pomocou ktorého môžeme vytvoriť aplikáciu pozostávajúcu z dátového modelu, prezentačnej alebo zobrazovacej vrstvy a radiča. Môžeme ju klasifikovať skôr ako architektonický vzor.
Záver
Týmto sa dokončuje naša diskusia o návrhových vzoroch v prostredí Java. Aj keď Java podporuje tri typy návrhových vzorov, pozri. Tvorivé, štrukturálne a behaviorálne vzory, viac nás zaujíma vzor tvorivého dizajnu.
Pokiaľ ide o rozsah tohto tutoriálu, diskutovali sme o troch príkladoch vzorov tvorivých návrhov, a to ojedinelý vzor, továrenský vzor a vzor staviteľa.
Singletonový vzor je najjednoduchší návrhový vzor a továrenská metóda má byť bežným návrhovým vzorom, ktorý je široko používaný. Vzor staviteľa sa používa na konštrukciu zložitých objektov a väčšinou sa používa pri vývoji zložitých aplikácií.
=> Vyskúšajte Sprievodcu dokonalým výučbou jazyka Java tu.
Odporúčané čítanie
- Výukový program Java String s programom String Buffer a String Builder
- Nasadenie Java: Vytvorenie a vykonanie súboru Java JAR
- Základy jazyka Java: Java Syntax, trieda Java a základné koncepty Java
- Virtuálny stroj Java: Ako JVM pomáha pri spúšťaní aplikácií Java
- Výukový program JAVA pre začiatočníkov: viac ako 100 praktických výučbových programov Java Video
- Celé číslo Java a trieda Java BigInteger s príkladmi
- Komponenty Java: Java Platform, JDK, JRE a Java Virtual Machine
- Zoznam dôležitých kľúčových slov v jazyku Java - vyhradené slová v jazyku Java