Model de proiectare a metodelor din fabrică


Intent

  • Definiți o interfață pentru crearea unui obiect, dar lăsați subclasele să decidă ce clasă să instanțeze. Factory Method permite o clasare a diferențierii subclase.
  • Definirea unui constructor „virtual”.
  • Operatorul new considerat dăunător.

Problemă

Un cadru trebuie să standardizeze modelul arhitectural pentru o serie de aplicații, dar să permită aplicațiilor individuale să-și definească propriile obiecte de domeniu și să asigure instanțierea lor.

Discuție

Metoda din fabrică este de a crea obiecte, deoarece Metoda șablon este de a implementa un algoritm. O superclasă specifică tot comportamentul standard și generic (folosind „substituenți” virtuali pur pentru pașii de creație), apoi delegă detaliile de creație subclaselor furnizate de client.

Factory Method face un design mai personalizabil și doar puțin mai complicat. Alte modele de proiectare necesită clase noi, în timp ce Metoda fabrică necesită doar o nouă operațiune.

Oamenii folosesc adesea Metoda fabrică ca modalitate standard de a crea obiecte; dar nu este necesar dacă: clasa care nu este instanțiată niciodată modificări sau instanțierea are loc într-o operație pe care subclasele o pot suprascrie cu ușurință (cum ar fi o operație de inițializare).

Factory Method este similară cu Abstract Factory, dar fără familiile de accent.

Methods Factory sunt specificate în mod obișnuit de un cadru arhitectural și apoi implementate de către utilizatorul cadrului.

Structură

Implementarea Metodei fabricii discutată în Gang of Four (mai jos) se suprapune în mare măsură cu cea a Abstract Factory. Din acest motiv, prezentarea din acest capitol se concentrează pe abordarea care a devenit populară de atunci.

O definiție din ce în ce mai populară a fabricii metoda este: o metodă static a unei clase care returnează un obiect de tipul acelei clase „. Dar, spre deosebire de un constructor, obiectul real pe care îl returnează ar putea fi o instanță a unei subclase. Unlikea constructor, un obiectul existent ar putea fi reutilizat, în loc de un obiect nou creat. Spre deosebire de un constructor, metoda din fabrică poate avea nume diferite și mai descriptive (ex. Color.make_RGB_color(float red, float green, float blue) și Color.make_HSB_color(float hue, float saturation, float brightness)

Clientul este complet decuplat de detaliile de implementare ale claselor derivate. Crearea polimorfă este acum posibilă.

Exemplu

Metoda din fabrică definește o interfață pentru crearea obiectelor, dar permite subclaselor să decidă ce clase să instanțieze. acest model. Producătorii de jucării din plastic prelucrează pudră de turnare din plastic și injectează plasticul în matrițele formelor dorite. Clasa de jucărie (mașină, figurină etc.) este determinată de matriță.

Listă de verificare

  1. Dacă aveți o ierarhie de moștenire care exercită polimorfism, luați în considerare adăugarea unei capacități de creare polimorfă prin definirea unei metode de fabrică static în clasa de bază.
  2. Proiectați argumentele metodei din fabrică. Ce calități sau caracteristici sunt necesare și suficiente pentru a identifica clasa derivată corectă pentru a crea o instanță?
  3. Luați în considerare proiectarea unui „pool de obiecte” intern care să permită reutilizarea obiectelor în loc să fie create de la zero.
  4. Luați în considerare realizarea tuturor constructorilor private sau protected.

Reguli generale

  • Clasele Abstract Factory sunt adesea implementate cu Methods Factory, dar pot fi implementate folosind Prototype.
  • Metodele Factory sunt de obicei apelate în cadrul Method Methods.
  • Method Factory: crearea prin moștenire . Prototip: creație prin delegare.
  • Adesea, proiectele încep folosind metoda Factory (mai puțin complicată, mai personalizabilă, proliferează subclasele) și evoluează către AbstractFactory, Prototype sau Builder (mai flexibil, mai complex) pe măsură ce proiectantul descoperă unde mai mult flexibilitatea este necesară.
  • Prototipul nu necesită subclasare, dar necesită o operațiune de inițializare. Metoda fabrică necesită subclasare, dar nu „trequire Initialize.
  • Avantajul unei metode fabrică este că poate returna aceeași instanță de mai multe ori sau poate returna o subclasă, mai degrabă decât un obiect de acel tip exact.
  • Unii avocați ai Metodei fabricii recomandă acest lucru ca o chestiune de proiectare a limbii (sau în caz contrar, ca o chestiune de stil ) absolut toți constructorii trebuie să fie privați sau protejați. Nu este treaba nimănui dacă o clasă produce un obiect nou sau reciclează unul vechi.
  • Operatorul new a considerat dăunător. Există o diferență între solicitarea unui obiect și crearea unuia. Operatorul new creează întotdeauna un obiect și nu reușește să încapsuleze crearea obiectelor.O metodă de fabrică impune această încapsulare și permite ca un obiect să fie solicitat fără o cuplare inextricabilă la actul creației.

Sprijiniți site-ul nostru gratuit și dețineți cartea electronică!

  • 22 de modele de proiectare și 8 principii explicate în profunzime
  • 406 pagini bine structurate, ușor de citit, fără jargon
  • 228 ilustrații și diagrame clare și utile
  • O arhivă cu exemple de cod în 4 limbi
  • Toate dispozitivele acceptate: formate EPUB / MOBI / PDF

Aflați mai multe …

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *