design patterns java
U ovom uputstvu razgovarat ćemo o dizajnerskim uzorcima u Javi. Proučit ćemo uzorke Singleton, Factory i Builder sa primjerima i prednostima:
Kada riješimo određeni problem, možemo ga riješiti učinkovitije ako već imamo definirane neke najbolje prakse. To će nam doista pomoći da slijedimo ove najbolje prakse i razvijemo pouzdanija rješenja.
Ovi najbolje prakse koji se može koristiti za razvoj dobro dokazana rješenja za rješavanje problema nazivaju se „ Uzorci dizajna '. Iskusni programeri OOP softvera koriste obrasce dizajna za rješavanje određenih zadataka.
=> Ovdje pogledajte Vodič za početnike za Java
Što ćete naučiti:
- Uzorci dizajna u Javi
- Jednokrani uzorak u Javi
- Tvornički uzorak u Javi
- Uzorak graditelja u Javi
- Zaključak
Uzorci dizajna u Javi
Uzorke dizajna prvi je izumio Christopher Alexander 1977. Ali kasnije su četvorica programera, naime Erich Gamma, Richard Helm, John Vlissides i Ralph Johnson, napisali knjigu pod naslovom ' Banda uzoraka s četiri dizajna, elementi višestruko objektno orijentiranog softvera ”1995. godine.
Od tada su svi uzorci dizajna postali poznati kao „ Banda od četiri uzorka dizajna '.
kako otvoriti torrent datoteku na mac
Uzorci dizajna neovisni su o bilo kojem programskom jeziku, jer se koriste za rješavanje uobičajenih objektno orijentiranih problema s dizajnom, a nisu ograničeni samo na određeni programski jezik. Dakle, u osnovi je to ideja, a ne provedba.
Tako pomoću dizajnerskih obrazaca možemo razviti programe koji su učinkovitiji, fleksibilniji, održiviji i mogu se ponovno koristiti.
Prednosti dizajnerskih uzoraka
U nastavku su navedene neke od prednosti upotrebe obrazaca dizajna u našim aplikacijama:
- Uzorci dizajna mogu se ponovno koristiti i mogu ih koristiti više projekata.
- Arhitekturu sustava možemo definirati pomoću dizajnerskih obrazaca.
- Uzorci dizajna pružaju transparentnost dizajnu aplikacije.
- Uzorci dizajna već su dobro ispitani i dokazani kako bismo ih mogli koristiti bez ikakvih briga.
- Uzorci dizajna omogućuju nam izgradnju boljih sustava, a također pružaju jasnoću u arhitekturi sustava.
Kada koristiti obrasce dizajna
Pa kada bismo točno trebali koristiti uzorke dizajna?
Uobičajeno koristimo obrazac dizajna tijekom početne faze analize i zahtjeva SDLC (životni ciklus razvoja softvera). Kada se koristi tijekom faze analize i zahtjeva SDLC-a, pruža više informacija o ovoj fazi. Java interno podržava obrasce dizajna.
Uzorci dizajna u Javi kategorizirani su na sljedeći način:
Što se tiče ovog vodiča, zanimaju nas samo kreativni uzorci dizajna.
Uzorci kreativnog dizajna dalje su klasificirani kako slijedi:
U ovom uputstvu razgovarat ćemo o sljedećim uzorcima dizajna:
- Jednokraki uzorak dizajna
- Obrazac tvorničkog dizajna
- Uzorak dizajnera graditelja
Počnimo s jednostrukim uzorkom dizajna u Javi.
Preporučena literatura = >> Uzorci dizajna za aplikacije temeljene na tikvicama
Jednokrani uzorak u Javi
Jednostruki uzorak vrsta je kreativnog uzorka u Javi. Singleton uzorak je obrazac dizajna u kojem je u Java virtualnom stroju prisutan samo jedan primjerak klase. Jednostruka klasa (koja implementira jednokračni uzorak) mora pružiti globalnu pristupnu točku da bi dobila instancu klase.
Drugim riječima, jednokračni uzorak ograničava instanciranje klase. Singleton obrazac koristi se u provedbi zapisnika za aplikacije. Također se koristi u implementaciji spremišta niti ili u predmemoriji.
Java satovi, java.awt.Desktop i java.lang.runtime također upotrijebite jednokračni uzorak.
Prednosti
- Kako se koristi samo jedan primjerak singleton klase, štedimo memoriju.
- Također, osigurava ponovnu upotrebu jer se isti pojedinačni objekt koristi iznova i iznova.
Sada prijeđimo na implementaciju jednobojnog uzorka.
Implementacija Singleton uzorka
Kao što je već spomenuto, jednokračni uzorak dizajna ograničava klasu samo s jednom instancom i ovoj instanci se daje globalna točka pristupa. Sve su se to klase iznova odnosile na isti objekt.
Sljedeći UML dijagram objašnjava Singleton obrazac.
Kao što pokazuje gornji UML dijagram, singleton klasa ima definiranu jednu instancu i pristupamo joj metodom getInstance (). Dakle, tvornica pojedinca koja je odgovorna za stvaranje objekata koristi metodu getInstance za vraćanje istog objekta (koji je tamo u klasi) iznova i iznova.
Pa kako implementirati Singleton obrazac u program?
Izrađujemo singleton klasu i imamo njen konstruktor kao 'private' tako da klasa ne može biti instancirana. Zatim kreiramo privatnu instancu ove singleton klase unutar same klase. Tada imamo posebnu javnu metodu getInstance () koja vraća singleton objekt u vanjski svijet.
Ova implementacija ove singleton klase kako je gore objašnjeno prikazana je u donjem Java programu.
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(); } }
Izlaz:
Sada ako provjerimo glavnu metodu, imajte na umu da ako pokušavamo stvoriti objekt klase singleton pomoću novog operatora, kompajler će dati pogrešku u kompilaciji (vidi komentirani kôd u glavnoj metodi). Objekt klase singleton dobivamo metodom getInstance (), a zatim ga možemo koristiti kao i obično za pristup metodama.
Tvornički uzorak u Javi
Tvornički uzorak u Java se naziva i 'Uzorak tvorničke metode' ili 'Virtualni konstruktor'. U ovom uzorku kreiramo sučelje ili apstraktnu klasu s deklaracijama metoda, a zatim su konkretne klase ili potklase koje implementiraju ovo sučelje ili nasljeđuju klasu odgovorne za stvaranje instanci klase.
Prednosti
- Tvornički uzorak vrsta je kreativnog uzorka i najčešće se koristi uzorak u Javi.
- Korištenjem tvorničkog uzorka osiguravamo da stvarna logika stvaranja ne bude izložena vanjskom svijetu.
Dakle, ako klasa koja implementira tvornički obrazac ima metodu za izračunavanje kamatne stope, tada će konkretne klase implementirati ovu klasu, a također će primijeniti metodu za izračunavanje kamatne stope.
Tada će postojati još jedna klasa koja je tvornička klasa koja će pristupiti tim konkretnim primjerima klase tako da nismo svjesni kako se implementira logika za izračunavanje kamatne stope. Pozivamo samo metodu i dobivamo izlaz.
Pa kada točno možemo koristiti obrazac Tvorničke metode?
Kada roditeljske klase odluče delegirati stvaranje instanci u svoje podrazrede, tada možemo ići na tvornički obrazac (Ovo je gore objašnjeno). Također možemo koristiti tvorničku metodu kada klasa ne zna koje podrazrede treba stvoriti.
Sada da vidimo provedbu uzorka tvorničke metode.
Provedba tvorničkog uzorka
Kao primjer, provedimo generičko sučelje oblika. Iz ovog sučelja možemo izvesti razne konkretne klase poput kruga, pravokutnika itd. Tada ćemo imati klasu shapeFactory koja će pristupiti objektima konkretne klase. UML za ovaj obrazac prikazan je u nastavku.
Kao što je već objašnjeno, ovo je UML dijagram za tvornički uzorak. Sada ćemo implementirati Java program koji demonstrira tvornički obrazac.
//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(); } }
Izlaz:
Uzorak graditelja u Javi
U obrascu Graditelja koristimo korak po korak za izgradnju složenog objekta pomoću malih i jednostavnih objekata.
Dakle, kad god naiđemo na objekt koji se ne može stvoriti u jednom koraku, idemo na obrazac graditelja.
Prednosti
- Koristeći obrazac Graditelj, možemo razdvojiti konstrukciju i prikaz objekta.
- Također možemo promijeniti unutarnji prikaz predmeta.
- Pomoću graditeljskog uzorka možemo graditi složene dizajne poput cijelog sustava isporuke.
Praktični primjer uzoraka Builder je sustav naručivanja hrane koji je obuhvaćao složene korake prikupljanja naručenih namirnica, zatim pakiranja, naplate, narudžbe u zgradama i slanja.
U ovom uputstvu implementirat ćemo primjer sustava za naručivanje tableta koji koristi obrazac Builder.
Implementacija uzoraka graditelja
Općeniti UML dijagram za obrazac Builder dan je u nastavku.
Gornji dijagram prikazuje UML dijagram uzorka Builder. Kao što je prikazano na gornjem dijagramu, imamo četiri komponente u obrascu Builder.
- Proizvod: Ovo predstavlja složeni objekt koji treba izgraditi.
- Graditelj sažetak klase: Apstraktna klasa koja sadrži prototipove svih funkcionalnosti potrebnih za izgradnju složenog objekta.
- Klasa ConcreteBuilder: Ovo je konkretna klasa koja nasljeđuje klasu Builder i stvara određeni složeni objekt. Možemo imati onoliko klasa ConcreteBuilder koliko nam treba.
- Klasa redatelja: Ova klasa kontrolira algoritme koji generiraju konačni proizvod.
Sljedeći primjer programiranja prikazuje demonstraciju uzoraka Builder pomoću sustava za naručivanje tableta za tablete.
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(); } }
Izlaz:
U gornjem primjeru izgradili smo cjeloviti sustav naručivanja tableta za dvije marke tableta, tj. Lenovo i Micromax. To su klase concreteBuilder koje nasljeđuju od apstraktne klase tvrtke. Tada imamo TabBuilder klasu koja gradi narudžbe za obje klase tableta.
Često postavljana pitanja
P # 1) Što su uzorci dizajna u Javi? Koje su vrste obrazaca dizajna u Javi?
pitanja i odgovori na razgovoru tehničara tehničke službe
Odgovor: Uzorci dizajna najbolja su praksa koja se može koristiti za razvijanje dobro provjerenih rješenja.
Java ima tri vrste obrazaca dizajna:
- Kreativni dizajn: Tvornički uzorak, Sažetak Tvornički uzorak, pojedinačni uzorak, uzorak graditelja i uzorak prototipa primjeri su kreativnih uzoraka dizajna. Oni su uglavnom uključeni u stvaranje predmeta.
- Uzorak strukturnog dizajna: Uglavnom se koriste za stvaranje strukture klase. Adapter, most i kompozitni uzorak popularni su uzorci strukturnog dizajna.
- Uzorak dizajna ponašanja: Oni pružaju bolju interakciju između objekata zajedno s fleksibilnošću za jednostavno proširenje implementacije. Uzorci promatrača, strategije, itd. Neki su primjeri obrazaca ponašanja.
P # 2) Zašto se koriste uzorci dizajna?
Odgovor: Uzorci dizajna pružaju nam dokazani i provjereni model rješenja koji možemo koristiti za rješavanje složenih problema. Uzorci dizajna omogućuju nam izgradnju kohezivnih modula s labavom spojnicom. Uzorci dizajna također čine interakciju između dizajnera učinkovitijom i djelotvornijom.
P # 3) Koji su primjeri uzoraka?
Odgovor: Primjeri prirodnih obrazaca su vidljive zakonitosti koje se nalaze u prirodi. Prirodni uzorci poput simetrija, drveća, valova, pjena, pruga, pukotina itd. Neki su primjeri prirodnih uzoraka.
P # 4) Je li MVC obrazac dizajna?
Odgovor: Da, to je vrsta dizajnerskog uzorka pomoću kojeg možemo izgraditi aplikaciju koja se sastoji od podatkovnog modela, prezentacije ili sloja prikaza i kontrolera. Možemo ga više klasificirati kao arhitektonski obrazac.
Zaključak
Ovim je završena naša rasprava o uzorcima dizajna u Javi. Iako Java podržava tri vrste obrazaca dizajna, naime. Kreativni, strukturni i bihevioralni obrasci, više nas zanima uzorak kreativnog dizajna.
Prema opsegu ovog vodiča, raspravljali smo o tri primjera kreativnih uzoraka dizajna, naime, jednobojnom uzorku, tvorničkom uzorku i uzorku graditelja.
Singleton uzorak je najjednostavniji uzorak dizajna, a tvornička metoda trebala bi biti uobičajeni uzorak dizajna koji se široko koristi. Uzorak graditelja koristi se za konstrukciju složenih objekata i uglavnom se koristi u razvoju složenih aplikacija.
=> Ovdje pogledajte Savršeni vodič za Java obuku.
Preporučena literatura
- Java string sa String Buffer-om i String Builder Tutorial
- Implementacija Jave: Izrada i izvršavanje Java JAR datoteke
- Osnove Java-a: Java sintaksa, Java Class i osnovni Java koncepti
- Java virtualni stroj: kako JVM pomaže u pokretanju Java aplikacije
- JAVA Tutorial za početnike: 100+ praktičnih Java Video tutorijala
- Java Integer i Java BigInteger klasa s primjerima
- Java komponente: Java platforma, JDK, JRE i Java virtualni stroj
- Popis važnih Java ključnih riječi - rezervirane riječi na Javi