design patterns java
În acest tutorial vom discuta modele de proiectare în Java. Vom studia modelele Singleton, Factory și Builder cu exemple și avantaje:
Atunci când rezolvăm o anumită problemă, o putem rezolva mai eficient dacă avem deja câteva bune practici definite. Acest lucru ne va ajuta într-adevăr să urmăm aceste bune practici și să dezvoltăm soluții mai fiabile.
Aceste cele mai bune practici care poate fi folosit pentru a se dezvolta soluții bine dovedite pentru rezolvarea problemelor se numesc „ Modele de design ”. Dezvoltatorii de software OOP cu experiență folosesc modele de proiectare pentru a rezolva sarcini specifice.
=> Consultați aici Ghidul pentru începători Java
Ce veți învăța:
- Modele de proiectare în Java
- Model Singleton în Java
- Model de fabrică în Java
- Model de constructor în Java
- Concluzie
Modele de proiectare în Java
Modelele de design au fost inventate pentru prima dată de Christopher Alexander în 1977. Dar mai târziu, patru dezvoltatori și anume Erich Gamma, Richard Helm, John Vlissides și Ralph Johnson au scris o carte intitulată „ Gang de patru modele de design, elemente de software reutilizabil orientat obiect ”În anul 1995.
De atunci, toate tiparele de design au devenit cunoscute sub numele de „ Gang of Four Patterns Design ”.
întrebări și răspunsuri de bază pentru interviurile Java pentru cei care se pregătesc pentru noi
Modelele de proiectare sunt independente de orice limbaje de programare, deoarece sunt utilizate pentru rezolvarea problemelor obișnuite de proiectare orientate pe obiecte și nu sunt limitate doar la un limbaj de programare specific. Deci, practic este o idee și nu o implementare.
Astfel, folosind modele de proiectare putem dezvolta programe care sunt mai eficiente, mai flexibile, mai ușor de întreținut și reutilizate.
Avantajele modelelor de proiectare
Mai jos sunt prezentate câteva dintre avantajele utilizării modelelor de design în aplicațiile noastre:
- Modelele de proiectare sunt reutilizabile și pot fi utilizate de mai multe proiecte.
- Putem defini arhitectura sistemului folosind modele de proiectare.
- Modelele de proiectare oferă transparență proiectării aplicației.
- Modelele de proiectare sunt deja bine testate și dovedite astfel încât să le putem folosi fără griji.
- Modelele de proiectare ne permit să construim sisteme mai bune și, de asemenea, să oferim claritate asupra arhitecturii sistemului.
Când se utilizează modele de design
Deci, când ar trebui să folosim exact modelele de proiectare?
De obicei, folosim un model de proiectare în faza inițială de analiză și cerință a SDLC (Ciclul de viață al dezvoltării software-ului). Atunci când este utilizat în timpul fazei de analiză și cerință a SDLC, oferă mai multe informații despre această fază. Java acceptă intern modelele de proiectare.
Modelele de proiectare din Java sunt clasificate după cum urmează:
În ceea ce privește acest tutorial, suntem interesați doar de tiparele de creație.
Modelele de design creaționale sunt clasificate în continuare după cum urmează:
În acest tutorial, vom discuta despre următoarele modele de proiectare:
- Model de design Singleton
- Model de proiectare din fabrică
- Model de proiectare a constructorului
Să începem cu un model de design unic în Java.
Citire recomandată = >> Modele de proiectare pentru aplicații bazate pe Flask
Model Singleton în Java
Un model unic este un tip de model de creație în Java. Modelul Singleton este un model de proiectare în care doar o singură instanță a unei clase este prezentă în mașina virtuală Java. O clasă de singleton (implementarea modelului de singleton) trebuie să furnizeze un punct de acces global pentru a obține instanța clasei.
Cu alte cuvinte, un model singleton restricționează instanțierea unei clase. Modelul Singleton este utilizat în implementarea jurnalului pentru aplicații. De asemenea, este utilizat în implementarea pool-ului de fire sau în cache.
Clasele Java, java.awt.Desktop și java.lang.runtime utilizați, de asemenea, un model single.
Avantaje
- Deoarece se folosește o singură instanță din clasa singleton, economisim memorie.
- De asemenea, asigură reutilizarea, deoarece același obiect singleton este folosit din nou și din nou.
Acum să trecem la implementarea tiparului singleton.
Implementarea modelului Singleton
După cum s-a menționat deja, un model de proiectare singleton restricționează clasa cu o singură instanță și acestei instanțe i se acordă un punct de acces global. Acestea erau toate clasele care se referă la același obiect din nou și din nou.
Următoarea diagramă UML explică modelul Singleton.
Așa cum arată diagrama UML de mai sus, o clasă singleton are o singură instanță definită și o accesăm prin metoda getInstance (). Deci, o fabrică singleton care este responsabilă pentru crearea obiectelor folosește metoda getInstance pentru a returna același obiect (care este acolo în clasă) din nou și din nou.
Deci, cum implementăm modelul Singleton într-un program?
Creăm o clasă singleton și avem constructorul său ca „privat”, astfel încât clasa să nu poată fi instanțiată. Apoi creăm o instanță privată a acestei clase singleton în interiorul clasei în sine. Apoi avem o metodă publică specială getInstance () care returnează un obiect singleton în lumea exterioară.
Această implementare a acestei clase de singleton, așa cum s-a explicat mai sus, este prezentată în programul Java de mai jos.
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(); } }
Ieșire:
Acum, dacă verificăm metoda principală, rețineți că, dacă încercăm să creăm un obiect al clasei singleton folosind un nou operator, compilatorul va da o eroare de compilare (a se vedea codul comentat în metoda principală). Obținem obiectul clasei singleton folosind metoda getInstance () și apoi îl putem folosi ca de obicei pentru a accesa metode.
Model de fabrică în Java
Modelul din fabrică este numit și „Modelul din metoda fabricii” sau „Constructorul virtual” în Java. În acest model, creăm o interfață sau o clasă abstractă cu declarații de metodă, iar apoi clasele sau subclasele concrete care implementează această interfață sau care moștenesc clasa sunt responsabile pentru crearea instanțelor clasei.
Avantaje
- Modelul din fabrică este un tip de model de creație și este cel mai frecvent utilizat model în Java.
- Prin utilizarea unui model de fabrică ne asigurăm că logica creației reale nu este expusă lumii exterioare.
Deci, dacă o clasă care implementează un model de fabrică are o metodă de calcul al ratei dobânzii, atunci clasele concrete vor implementa această clasă și vor implementa și metoda de calcul al ratei dobânzii.
Apoi va exista o altă clasă, care este o clasă fabrică care va accesa aceste instanțe concrete de clasă, astfel încât să nu fim conștienți de modul în care este implementată logica pentru calcularea ratei dobânzii. Numim doar metoda și obținem rezultatul.
Deci, când anume putem folosi modelul Factory Method?
Când clasele părinte decid să delege crearea instanțelor subclaselor lor, atunci putem alege un model de fabrică (Acest lucru este explicat mai sus). De asemenea, putem folosi metoda din fabrică atunci când clasa nu știe ce subclase urmează să fie create.
Acum să vedem implementarea modelului metodei din fabrică.
Implementarea modelului fabricii
De exemplu, să implementăm o interfață de formă generică. Putem obține diverse clase concrete din această interfață, cum ar fi cercul, dreptunghiul etc. Apoi vom avea o clasă shapeFactory care va accesa obiectele clasei concrete. UML pentru acest model este prezentat mai jos.
După cum sa explicat deja, aceasta este diagrama UML pentru modelul din fabrică. Acum vom implementa un program Java care demonstrează modelul din fabrică.
//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(); } }
Ieșire:
Model de constructor în Java
În modelul Builder, folosim o abordare pas cu pas pentru a construi un obiect complex folosind obiecte mici și simple.
Deci, ori de câte ori întâlnim un obiect care nu poate fi creat într-un singur pas, ne îndreptăm spre un model de constructor.
Avantaje
- Folosind modelul Builder, putem separa construcția și reprezentarea unui obiect.
- De asemenea, putem schimba reprezentarea internă a obiectului.
- Putem construi modele complexe, precum un întreg sistem de livrare, utilizând modelul constructor.
Un exemplu practic de model Builder este sistemul de comandă a alimentelor care presupunea pași complexi de colectare a produselor alimentare comandate, apoi ambalare, facturare, comandă de construcție și apoi livrare.
În acest tutorial, vom implementa un exemplu de sistem de comandă a tabletei folosind modelul Builder.
Implementarea modelului Builder
Diagrama UML generală pentru modelul Builder este prezentată mai jos.
Diagrama de mai sus prezintă diagrama UML a modelului Builder. Așa cum se arată în diagrama de mai sus, avem patru componente în modelul Builder.
- Produs: Acesta reprezintă obiectul complex care trebuie construit.
- Clasa Rezumat constructor: O clasă abstractă care conține prototipuri ale tuturor funcționalităților necesare construirii unui obiect complex.
- Clasa ConcreteBuilder: Aceasta este o clasă concretă care moștenește din clasa Builder și creează un anumit obiect complex. Putem avea oricâte clase de ConcreteBuilder avem nevoie.
- Clasa director: Această clasă controlează algoritmii care generează produsul final.
Următorul exemplu de programare arată demonstrația unui model Builder folosind un sistem de construcție de comandă a tabletei.
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(); } }
Ieșire:
În exemplul de mai sus, am construit sistemul complet de comandă a tabletelor pentru două mărci de tablete, adică Lenovo și Micromax. Acestea sunt clasele concreteBuilder care moștenesc de la compania de clase abstracte. Apoi avem o clasă TabBuilder care construiește comenzile pentru ambele clase de tablete.
întrebări frecvente
Q # 1) Ce sunt tiparele de proiectare în Java? Care sunt tipurile de modele de proiectare în Java?
care este cel mai nou sistem de operare
Răspuns: Modelele de proiectare sunt cele mai bune practici care pot fi utilizate pentru a dezvolta soluții bine testate.
Java are trei tipuri de modele de proiectare:
- Model de creație: Modelul fabricii, modelul abstract Factory, modelul Singleton, modelul Builder și modelul prototip sunt exemple de modele de proiectare creaționale. Acestea sunt implicate în principal în crearea de obiecte.
- Model de proiectare structurală: Acestea sunt utilizate în principal pentru crearea unei structuri de clasă. Adaptorul, podul și modelul compozit sunt modele populare de proiectare structurală.
- Model de comportament: Acestea oferă o interacțiune mai bună între obiecte, împreună cu flexibilitatea pentru extinderea cu ușurință a implementării. Modelele observatorilor, modelul de strategie etc. sunt câteva exemple de tipare comportamentale.
Q # 2) De ce sunt utilizate modelele de proiectare?
Răspuns: Modelele de proiectare ne oferă un model de soluție dovedit și testat pe care îl putem folosi pentru a rezolva probleme complexe. Modelele de proiectare ne permit să construim module coezive cu cuplaje libere. Modelele de proiectare fac, de asemenea, interacțiunea dintre designeri mai eficientă și mai eficientă.
Î # 3) Care sunt exemplele de tipare?
Răspuns: Exemple de modele naturale sunt regularități vizibile găsite în natură. Modelele naturale precum simetriile, copacii, valurile, spumele, dungile, fisurile etc. sunt câteva exemple de modele naturale.
Q # 4) Este MVC un model de design?
Răspuns: Da, este un fel de model de proiectare cu ajutorul căruia putem construi o aplicație constând din modelul de date, prezentarea sau stratul de vizualizare și controlerul. O putem clasifica mai mult ca un model arhitectural.
Concluzie
Aceasta completează discuția noastră cu privire la modelele de proiectare în Java. Deși Java acceptă trei tipuri de modele de design și anume. Modele de creație, structurale și comportamentale, suntem mai interesați de modelul de creație.
Conform scopului acestui tutorial, am discutat trei exemple de modele de proiectare creațională și anume, modelul singleton, modelul fabricii și modelul constructor.
Modelul Singleton este cel mai simplu model de proiectare, iar metoda din fabrică ar trebui să fie un model de proiectare comun, care este utilizat pe scară largă. Modelul constructor este utilizat pentru a construi obiecte complexe și este utilizat în principal în dezvoltarea aplicațiilor complexe.
=> Consultați aici Ghidul perfect de instruire Java.
Lectură recomandată
- Java String cu buffer de șiruri și tutorial pentru generatorul de șiruri
- Implementarea Java: crearea și executarea fișierului Java JAR
- Noțiuni de bază Java: Sintaxă Java, Java Class și Core Java Concepts
- Mașină virtuală Java: Cum ajută JVM la rularea aplicației Java
- Tutorial JAVA pentru începători: peste 100 de tutoriale video Java practice
- Java Integer și Java BigInteger Class cu exemple
- Componente Java: platformă Java, JDK, JRE și mașină virtuală Java
- Lista de cuvinte cheie importante Java - Cuvinte rezervate în Java