Este un model de design creațional care vorbește despre crearea unui obiect. Modelul de proiectare din fabrică spune să definiți o interfață (O interfață java sau o clasă abstractă) pentru crearea obiectului și lăsați subclasele să decidă ce clasă să instanțieze.
Subiecte importante pentru modelul de proiectare a metodei Factory în Java
- Care este modelul de proiectare a metodei din fabrică în Java?
- Când să utilizați Factory Method Design Pattern în Java?
- Componentele cheie ale modelului de proiectare a metodei din fabrică
- Exemplu de model de proiectare pentru metoda fabricii în Java
- Cazuri de utilizare ale modelului de proiectare a metodei din fabrică în Java
- Avantajele modelului de proiectare a metodei fabricii în Java
- Dezavantajele modelului de proiectare a metodei fabricii în Java
Care este modelul de proiectare a metodei din fabrică în Java?
Factory Method Design Pattern definește o interfață pentru crearea unui obiect, dar lasă subclasa să decidă ce clasă să instanțieze. Metoda Factory permite unei clase să amâne instanțiarea la subclasă.
Mai jos este explicația imaginii de mai sus:
- Metoda din fabrică din interfață permite unei clase să amâne instanțiarea la una sau mai multe subclase concrete.
- Deoarece aceste modele de design vorbesc despre instanțierea unui obiect, ele intră în categoria modelului de design creațional.
- Dacă observăm numele Metoda fabricii , asta înseamnă că există o metodă care este o fabrică și, în general, fabricile sunt implicate cu chestii de creație și aici, cu aceasta, se creează un obiect.
- Este una dintre cele mai bune modalități de a crea un obiect în care logica de creare a obiectelor este ascunsă de client. Acum să ne uităm la implementare.
Când să utilizați Factory Method Design Pattern în Java?
Modelul de proiectare a metodei din fabrică poate fi utilizat în java în următoarele cazuri:
- O clasă nu poate prezice tipul de obiecte pe care trebuie să le creeze.
- O clasă vrea ca subclasele sale să specifice obiectele pe care le creează.
- Clasele deleg responsabilitatea uneia dintre mai multe subclase de ajutor și urmăriți să păstrați informațiile despre care subclasă de ajutor este delegatul într-un anumit domeniu sau locație.
Componentele cheie ale modelului de proiectare a metodei din fabrică
Produs
- Este o clasă abstractă sau o interfață care definește operațiunile comune pentru obiectele pe care le va crea fabrica.
- Produsele concrete sunt clasele reale care implementează interfața Produs, fiecare reprezentând un anumit tip de obiect de creat.
Creator
- Este o clasă abstractă sau o interfață care declară metoda din fabrică.
- Această metodă este responsabilă pentru crearea obiectelor Product, dar deleagă crearea propriu-zisă subclaselor.
Creatori concreti
- Acestea sunt subclase ale Creatorului care implementează metoda fabricii.
- Ei decid ce produs concret de beton să creeze, adesea pe baza parametrilor de intrare sau a configurației.
Metoda fabricii
- Este o metodă definită în clasa Creator care este responsabilă pentru crearea obiectelor Product.
- Este de obicei declarat ca abstract în Creator și implementat în Creatorii concreti.
Exemplu de model de proiectare pentru metoda fabricii în Java
Declarație problemă
Dezvoltați un sistem software pentru o platformă de comerț electronic care se ocupă cu diverse tipuri de produse. Fiecare categorie de produse (de exemplu, electronice, îmbrăcăminte, cărți) necesită o manipulare specifică în timpul creării. Cu toate acestea, doriți să decuplați codul client de logica concretă de creare a produsului pentru a spori flexibilitatea și mentenabilitatea. În plus, doriți să permiteți o extensie ușoară prin adăugarea de noi tipuri de produse în viitor, fără a modifica codul existent.
Soluție folosind Clasa abstractă
Problema de mai sus poate fi rezolvată folosind Factory Method Design Pattern:
Java
// 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();> > }> }> |
>
contacte blocate
>Ieșire
This is Concrete Product A. This is Concrete Product B.>
Soluție folosind interfața
Problema de mai sus poate fi rezolvată folosind Factory Method Design Pattern:
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();> > }> }> |
>
>Ieșire
This is Concrete Product A. This is Concrete Product B.>
Cazuri de utilizare ale modelului de proiectare a metodei din fabrică în Java
Iată câteva aplicații comune ale modelului Factory Method Design în Java:
- Cadre de creație:
- JDBC (Java Database Connectivity) folosește în mod extensiv fabrici pentru a crea conexiuni, declarații și seturi de rezultate. Cadrele de injectare a dependenței precum Spring și Guice se bazează în mare măsură pe fabrici pentru a crea și gestiona boabele.
- Truse de instrumente GUI:
- Swing și JavaFX folosesc fabrici pentru a crea componente UI, cum ar fi butoane, câmpuri de text și etichete, permițând personalizarea și flexibilitatea în proiectarea UI.
- Cadre de înregistrare:
- Cadrele de logare precum Log4j și Logback folosesc fabrici pentru a crea loggere cu diferite configurații, permițând controlul asupra nivelurilor de înregistrare și a destinațiilor de ieșire.
- Serializare și deserializare:
- Cadrele de serializare a obiectelor folosesc adesea fabrici pentru a crea obiecte din date serializate, acceptând diferite formate de serializare și versiune.
- Sisteme de pluginuri:
- Sistemele bazate pe pluginuri folosesc adesea fabrici pentru a încărca și a crea instanțe de plugin în mod dinamic, permițând extensibilitate și personalizare.
- Dezvoltarea jocului:
- Motoarele de joc folosesc adesea fabrici pentru a crea diferite tipuri de obiecte de joc, personaje și niveluri, promovând organizarea codului și flexibilitatea.
- Dezvoltare web:
- Cadrele web folosesc uneori fabrici pentru a crea componente de vizualizare, controlere și servicii, permițând modularitatea și testabilitatea în aplicațiile web.
Avantajele modelului de proiectare a metodei fabricii în Java
Avantajele Factory Method Design Pattern în Java sunt:
- Decuplare: Separă logica de creare a obiectelor de codul client care utilizează acele obiecte. Acest lucru face codul mai flexibil și mai ușor de întreținut, deoarece modificările aduse procesului de creare nu necesită modificări ale codului clientului.
- Extensibilitate: Este ușor să introduceți noi tipuri de produse fără a modifica codul clientului. Trebuie pur și simplu să creați o nouă subclasă Concrete Creator și să implementați metoda din fabrică pentru a produce noul produs.
- Testabilitate: Simplifică testarea unitară, permițându-vă să bateți joc sau să împiedicați crearea de produse în timpul testelor. Puteți testa diferite implementări de produse în mod izolat, fără a vă baza pe crearea reală a obiectelor.
- Reutilizarea codului: Metoda din fabrică poate fi reutilizată în diferite părți ale aplicației unde este necesară crearea de obiecte. Acest lucru promovează centralizarea și reutilizarea logicii de creare a obiectelor.
- Încapsulare: Ascunde clasele de produse concrete din codul clientului, făcând codul mai puțin dependent de implementări specifice. Acest lucru îmbunătățește mentenabilitatea și reduce cuplarea.
Dezavantajele modelului de proiectare a metodei fabricii în Java
Dezavantajele modelului de proiectare a metodei fabricii în Java sunt:
- Complexitate crescută: Introduce clase și interfețe suplimentare, adăugând un strat de abstractizare care poate face codul mai complex de înțeles și de întreținut, în special pentru cei care nu sunt familiarizați cu modelul.
- deasupra capului: Utilizarea polimorfismului și a legării dinamice poate afecta ușor performanța, deși acest lucru este adesea neglijabil în majoritatea aplicațiilor.
- Cuplaje strânse în cadrul ierarhiilor de produse: Creatorii de beton sunt încă strâns cuplati cu produsele lor de beton corespunzătoare. Schimbările la unul necesită adesea schimbări la celălalt.
- Dependența de subclase concrete: Codul clientului depinde în continuare de clasa abstractă Creator, necesitând cunoașterea subclaselor sale concrete pentru a efectua apeluri corecte de metodă din fabrică.
- Potențial de utilizare excesivă: Este important să utilizați modelul Metodei din fabrică în mod judicios pentru a evita suprainginerirea aplicației. Crearea simplă a obiectelor poate fi adesea gestionată direct, fără a fi nevoie de o fabrică.
- Provocări de testare: Testarea logicii fabricii în sine poate fi mai complexă.
Concluzie
Până acum am aflat ce este modelul de proiectare a metodei Factory și cum să-l implementăm. Cred că acum avem o înțelegere corectă a avantajului acestui mecanism de proiectare. Metodele din fabrică sunt răspândite în seturile de instrumente și cadrele. Exemplul de document precedent este o utilizare tipică în MacApp și ET++.
numpy meshgrid
Citiți în continuare : Tutorial Java Design Patterns