design patterns java
V tej vadnici bomo razpravljali o vzorcih oblikovanja v Javi. Preučili bomo vzorce Singleton, Factory in Builder s primeri in prednostmi:
Ko rešimo določen problem, ga lahko rešimo učinkoviteje, če imamo že določene nekaj najboljših praks. To nam bo dejansko pomagalo slediti tem najboljšim praksam in razviti bolj zanesljive rešitve.
Te Najboljše prakse ki ga lahko uporabimo za razvoj dobro dokazane rešitve za reševanje problemov Vzorci oblikovanja '. Izkušeni razvijalci programske opreme OOP uporabljajo vzorce oblikovanja za reševanje določenih nalog.
=> Tukaj si oglejte Vodnik za začetnike Java
Kaj se boste naučili:
- Oblikovanje vzorcev v Javi
- Singleton vzorec v Javi
- Tovarniški vzorec v Javi
- Vzorec graditelja v Javi
- Zaključek
Oblikovanje vzorcev v Javi
Oblikovalske vzorce je prvi izumil Christopher Alexander leta 1977. Kasneje pa so štirje razvijalci, in sicer Erich Gamma, Richard Helm, John Vlissides in Ralph Johnson, napisali knjigo z naslovom ' Skupina vzorcev štirih oblik, elementi predmetno usmerjene programske opreme za večkratno uporabo ”Leta 1995.
Od takrat so vsi oblikovalski vzorci postali znani kot „ Tolpa štirih vzorčnih vzorcev '.
vprašanja za intervju o milu in počitku
Vzorci načrtovanja so neodvisni od programskih jezikov, saj se uporabljajo za reševanje pogostih predmetno usmerjenih problemov oblikovanja in niso omejeni le na določen programski jezik. V bistvu gre torej za idejo in ne za izvedbo.
Tako lahko z vzorci oblikovanja razvijemo programe, ki so bolj učinkoviti, prilagodljivi, vzdržni in ponovno uporabni.
Prednosti oblikovalskih vzorcev
Spodaj so navedene nekatere prednosti uporabe vzorcev oblikovanja v naših aplikacijah:
- Vzorci oblikovanja so večkrat uporabni in jih lahko uporabljajo več projektov.
- Z arhitekturnimi vzorci lahko določimo sistemsko arhitekturo.
- Oblikovalski vzorci zagotavljajo preglednost zasnove aplikacije.
- Oblikovalski vzorci so že dobro preizkušeni in dokazani, da jih lahko uporabljamo brez skrbi.
- Vzorčni vzorci nam omogočajo, da gradimo boljše sisteme, poleg tega pa zagotavljajo jasnost arhitekture sistema.
Kdaj uporabiti vzorce oblikovanja
Kdaj naj torej natančno uporabimo oblikovalske vzorce?
Običajno uporabimo vzorec načrtovanja med začetno fazo analize in zahtev SDLC (življenjski cikel razvoja programske opreme). Ko se uporablja med fazo analize in zahteve SDLC, daje več informacij tej fazi. Java interno podpira vzorce oblikovanja.
Vzorci oblikovanja v Javi so razvrščeni na naslednji način:
Kar zadeva to vadnico, nas zanimajo samo kreativni vzorci oblikovanja.
Vzorci kreativnega oblikovanja so nadalje razvrščeni na naslednji način:
V tej vadnici bomo razpravljali o naslednjih vzorcih oblikovanja:
- Enolični oblikovalski vzorec
- Vzorec tovarniške zasnove
- Vzorec oblikovalca graditelja
Začnimo z enojnim vzorcem oblikovanja v Javi.
Priporočeno branje = >> Oblikovanje vzorcev za aplikacije na osnovi bučke
Singleton vzorec v Javi
Enotni vzorec je vrsta ustvarjalnega vzorca v Javi. Singleton vzorec je vzorec oblikovanja, pri katerem je v navideznem stroju Java prisoten le en primerek razreda. Razred singleton (ki izvaja singleton vzorec) mora zagotoviti globalno dostopno točko, da dobi primerek razreda.
Z drugimi besedami, enojni vzorec omejuje instanciranje razreda. Enotni vzorec se uporablja pri izvedbi zapisovalnika programov. Uporablja se tudi pri izvajanju ali predpomnilniku področja niti.
Razredi Java, java.awt.Desktop in java.lang.runtime uporabite tudi enojni vzorec.
Prednosti
- Ker se uporablja samo en primerek razreda singleton, prihranimo pomnilnik.
- Zagotavlja tudi večkratno uporabo, saj se isti posamezni predmet vedno znova uporablja.
Zdaj pa pojdimo na izvajanje singleton vzorca.
Izvajanje Singleton vzorca
Kot smo že omenili, enokraki vzorec načrtovanja omejuje razred samo z enim primerkom in ta primerek dobi globalno dostopno točko. To so bili vsi razredi, ki se vedno znova nanašajo na isti predmet.
Naslednji diagram UML pojasnjuje vzorec Singleton.
Kot kaže zgornji diagram UML, ima razred singleton definiran en primerek in do njega dostopamo z metodo getInstance (). Torej enotonska tovarna, ki je odgovorna za ustvarjanje predmetov, uporablja metodo getInstance za vrnitev istega predmeta (ki je v razredu) znova in znova.
Torej, kako naj izvedemo Singleton vzorec v programu?
Ustvarimo singleton razred in imamo njegov konstruktor kot 'private', tako da razreda ni mogoče ustvariti. Nato v samem razredu izdelamo zasebni primerek tega posameznega razreda. Potem imamo posebno javno metodo getInstance (), ki vrne singleton objekt v zunanji svet.
Ta izvedba tega posameznega razreda, kot je pojasnjeno zgoraj, je prikazana v spodnjem programu Java.
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(); } }
Izhod:
Zdaj, če preverimo glavno metodo, upoštevajte, da če poskusimo z novim operatorjem ustvariti objekt razreda singleton, bo prevajalnik dal napako pri prevajanju (glejte komentirano kodo v glavni metodi). Objekt razreda singleton dobimo z metodo getInstance (), nato pa ga lahko uporabimo kot običajno za dostop do metod.
Tovarniški vzorec v Javi
Tovarniški vzorec se v Javi imenuje tudi 'Factory Method pattern' ali 'Virtual Constructor'. V tem vzorcu ustvarimo vmesnik ali abstraktni razred z izjavami metod, nato pa so konkretni razredi ali podrazredi, ki izvajajo ta vmesnik ali podedujejo razred, odgovorni za ustvarjanje primerkov razreda.
Prednosti
- Tovarniški vzorec je vrsta kreacijskega vzorca in je najpogosteje uporabljen vzorec v Javi.
- Z uporabo tovarniškega vzorca zagotavljamo, da dejanska logika ustvarjanja ni izpostavljena zunanjemu svetu.
Torej, če ima razred, ki izvaja tovarniški vzorec, metodo za izračun obrestne mere, bodo konkretni razredi izvedli ta razred in tudi metodo za izračun obrestne mere.
Potem bo še en razred, ki je tovarniški razred, ki bo dostopal do teh konkretnih primerkov razreda, tako da se ne zavedamo, kako se izvaja logika za izračun obrestne mere. Pokličemo samo metodo in dobimo izhod.
Kdaj natančno torej lahko uporabimo vzorec tovarniške metode?
Ko se nadrejeni razredi odločijo, da bodo ustvarjanje primerkov prenesli na svoje podrazrede, se bomo lahko odločili za tovarniški vzorec (to je razloženo zgoraj). Tovarniško metodo lahko uporabimo tudi, kadar razred ne ve, katere podrazrede je treba ustvariti.
Zdaj pa poglejmo izvajanje vzorca tovarniške metode.
Izvajanje tovarniškega vzorca
Kot primer izvedimo generični vmesnik oblike. Iz tega vmesnika lahko izpeljemo različne konkretne razrede, kot so krog, pravokotnik itd. Potem bomo imeli razred shapeFactory, ki bo dostopal do predmetov konkretnega razreda. UML za ta vzorec je prikazan spodaj.
Kot smo že pojasnili, je to diagram UML za tovarniški vzorec. Zdaj bomo implementirali program Java, ki prikazuje tovarniški vzorec.
//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(); } }
Izhod:
Vzorec graditelja v Javi
V vzorcu Builder uporabljamo pristop po korakih za izdelavo kompleksnega predmeta z uporabo majhnih in preprostih predmetov.
Torej, kadar naletimo na objekt, ki ga ni mogoče ustvariti v enem koraku, se odločimo za vzorec graditelja.
Prednosti
- Z vzorcem Builder lahko ločimo konstrukcijo in predstavitev predmeta.
- Prav tako lahko spremenimo notranjo predstavitev predmeta.
- Z uporabo gradbenega vzorca lahko izdelamo zapletene zasnove kot celoten sistem dostave.
Praktičen primer vzorca Builder je sistem naročanja živil, ki je vključeval zapletene korake zbiranja naročenih živil, nato pakiranja, obračunavanja, naročila gradbe in nato pošiljanja.
V tej vadnici bomo izvedli primer sistema za naročanje tabličnih računalnikov z uporabo vzorca Builder.
Izvajanje vzorca graditelja
Splošni diagram UML za vzorec Builder je podan spodaj.
Zgornji diagram prikazuje diagram UML vzorca Builder. Kot je prikazano na zgornjem diagramu, imamo štiri komponente v vzorcu Builder.
- Izdelek: To predstavlja zapleten objekt, ki ga je treba zgraditi.
- Builder Povzetek: Abstraktni razred, ki vsebuje prototipe vseh funkcionalnosti, potrebnih za izdelavo kompleksnega predmeta.
- Razred ConcreteBuilder: To je konkreten razred, ki podeduje razred Builder in ustvari določen zapleten objekt. Lahko imamo toliko razredov ConcreteBuilder, kolikor jih potrebujemo.
- Razred režiserja: Ta razred nadzoruje algoritme, ki ustvarjajo končni izdelek.
Naslednji primer programiranja prikazuje prikaz vzorca Builder z uporabo tabličnega sistema za urejanje stavb.
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(); } }
Izhod:
V zgornjem primeru smo zgradili celoten sistem za naročanje tabličnih računalnikov za dve znamki tabličnih računalnikov, tj. Lenovo in Micromax. To so razredi concreteBuilder, ki podedujejo podjetje abstraktnih razredov. Nato imamo razred TabBuilder, ki gradi naročila za oba razreda tabličnih računalnikov.
Pogosto zastavljena vprašanja
V # 1) Kaj so vzorci oblikovanja v Javi? Katere so vrste vzorcev oblikovanja v Javi?
seznam tehtanih grafov sosednosti c ++
Odgovor: Vzorčni vzorci so najboljše prakse, s katerimi lahko razvijemo dobro preizkušene rešitve.
Java ima tri vrste vzorcev oblikovanja:
- Vzorec kreativnega oblikovanja: Tovarniški vzorec, Povzetek Tovarniški vzorec, Singleton vzorec, Builder vzorec in prototip vzorec so primeri kreativnih vzorcev oblikovanja. Ti se ukvarjajo predvsem z ustvarjanjem predmetov.
- Vzorec strukturnega oblikovanja: Večinoma se uporabljajo za ustvarjanje strukture razreda. Adapter, most in sestavljeni vzorec so priljubljeni vzorci strukturnega oblikovanja.
- Vzorec vedenjskega oblikovanja: Ti zagotavljajo boljšo interakcijo med predmeti in prilagodljivost za enostavno podaljšanje izvajanja. Vzorčni vzorci, vzorci strategij itd. So nekateri primeri vedenjskih vzorcev.
V # 2) Zakaj se uporabljajo vzorčni vzorci?
Odgovor: Vzorčni vzorci nam zagotavljajo preizkušen in preizkušen model rešitve, ki ga lahko uporabimo za reševanje zapletenih problemov. Oblikovalski vzorci nam omogočajo gradnjo kohezivnih modulov z ohlapno sklopko. Oblikovalski vzorci naredijo tudi interakcijo med oblikovalci bolj učinkovito in uspešno.
V # 3) Kateri so primeri vzorcev?
Odgovor: Primeri naravnih vzorcev so vidne zakonitosti, ki jih najdemo v naravi. Naravni vzorci, kot so simetrije, drevesa, valovi, pene, proge, razpoke itd., So nekateri primeri naravnih vzorcev.
V # 4) Ali je MVC vzorec oblikovanja?
Odgovor: Da, gre za nekakšen oblikovalski vzorec, s pomočjo katerega lahko izdelamo aplikacijo, ki jo sestavljajo podatkovni model, predstavitev ali pogled in plast krmilnika. Lahko ga bolj uvrstimo med arhitekturne vzorce.
Zaključek
S tem smo zaključili našo razpravo o vzorcih oblikovanja v Javi. Čeprav Java podpira tri vrste vzorcev oblikovanja, tj. Ustvarjalni, strukturni in vedenjski vzorci, bolj nas zanima vzor kreacijskega oblikovanja.
Glede na obseg te vadnice smo obravnavali tri primere kreativnih vzorcev oblikovanja, in sicer enojni vzorec, tovarniški vzorec in vzorec graditelja.
Singleton vzorec je najpreprostejši oblikovalski vzorec, tovarniška metoda pa naj bi bila pogost oblikovalski vzorec, ki se pogosto uporablja. Vzorec graditelja se uporablja za konstruiranje kompleksnih predmetov in se večinoma uporablja pri razvoju zapletenih aplikacij.
=> Tukaj si oglejte Perfect Java Training Guide.
Priporočeno branje
- Java String z vmesnikom String Buffer in String Builder
- Uvajanje Java: Ustvarjanje in izvajanje datoteke Java JAR
- Osnove Java: Sintaksa Java, Razred Java in Osnovni koncepti Java
- Navidezni stroj Java: kako JVM pomaga pri zagonu aplikacije Java
- JAVA Vadnica za začetnike: 100+ praktičnih Javnih video vadnic
- Java Integer in Java BigInteger Class z primeri
- Komponente Java: Java Platform, JDK, JRE in Java Virtual Machine
- Pomemben seznam ključnih besed Java - Rezervirane besede v Javi