Fabrikkmetodedesignmønster


Hensikt

  • Definer et grensesnitt for å lage et objekt, men la underklasser avgjøre hvilken klasse som skal instantieres. Factory Method lar en klasse deferinstantiering til underklasser.
  • Definere en «virtuell» konstruktør.
  • new -operatøren anses som skadelig.

Problem

Et rammeverk må standardisere den arkitektoniske modellen for en rekke applikasjoner, men tillate individuelle applikasjoner å definere sine egne hovedobjekter og sørge for deres instantiering.

Diskusjon

Fabrikkmetode er å lage objekter ettersom malmetode er å implementere en algoritme. En superklasse spesifiserer all standard og generell oppførsel (ved hjelp av rene virtuelle «plassholdere» for skapelsesteg), og delegerer deretter opprettelsesdetaljene til underklasser som leveres av klienten.

Fabrikkmetode gjør et design mer tilpassbart og bare litt mer komplisert. Andre designmønstre krever nye klasser, mens Factory Method bare krever en ny operasjon.

Folk bruker ofte Factory Method som standard måte å lage objekter på, men det er ikke nødvendig hvis: klassen som er instansert aldri endringer eller instantiering finner sted i en operasjon som underklasser lett kan overstyre (for eksempel en initialiseringsoperasjon).

Fabrikkmetoden ligner på Abstrakt fabrikk, men uten vektfamilier.

Fabrikkmetoder blir rutinemessig spesifisert av et arkitektonisk rammeverk, og deretter implementert av brukeren av rammeverket.

Struktur

Implementeringen av Factory Method diskutert i Gang of Four (nedenfor) overlapper stort sett med det fra Abstract Factory. Av den grunn fokuserer presentasjonen i dette kapittelet på tilnærmingen som har blitt populær siden.

En stadig mer populær definisjon av fabrikk metoden er: en static metode for en klasse som returnerer et objekt av den klassen «. Men i motsetning til en konstruktør, kan det faktiske objektet den returnerer være en forekomst av en underklasse. Unlikea konstruktør, en eksisterende objekt kan bli gjenbrukt, i stedet for et nytt objekt opprettet. I motsetning til en konstruktør kan fabrikkmetodeskanne forskjellige og mer beskrivende navn (f.eks. Color.make_RGB_color(float red, float green, float blue) og Color.make_HSB_color(float hue, float saturation, float brightness)

Klienten er helt frakoblet implementeringsdetaljene for avledede klasser. Polymorf opprettelse er nå mulig.

Eksempel

Fabrikkmetoden definerer et grensesnitt for å lage objekter, men lar underklasser bestemme hvilke klasser som skal instantieres. Injeksjonstrykkpresser viser dette mønster. Produsenter av plastleker bearbeider støpepulver av plast og sprøyter plasten inn i form av ønsket form. Klassen av leketøy (bil, actionfigur osv.) Bestemmes av formen.

Sjekkliste

  1. Hvis du har et arvshierarki som utøver polymorfisme, bør du vurdere å legge til en polymorf opprettingsevne ved å definere en static fabrikkmetode i basisklassen.
  2. Design argumentene til fabrikkmetoden. Hvilke egenskaper eller egenskaper er nødvendige og tilstrekkelige for å identifisere riktig avledet klasse for å sette i gang?
  3. Vurder å designe et internt «objektbasseng» som gjør at gjenstander kan brukes på nytt i stedet for å opprettes fra bunnen av. å lage alle konstruktører private eller protected.

Tommelfingerregler

  • Abstrakte fabrikkklasser implementeres ofte med fabrikkmetoder, men de kan implementeres ved hjelp av prototype.
  • Fabrikkmetoder kalles vanligvis innenfor malmetoder.
  • fabrikkmetode: oppretting gjennom arv . Prototype: skapelse gjennom delegering.
  • Ofte begynner design med Factory Method (mindre komplisert, mer tilpassbar, underklasser sprer seg) og utvikler seg mot AbstractFactory, Prototype eller Builder (mer fleksibel, mer kompleks) når designeren oppdager hvor mer det er behov for fleksibilitet.
  • Prototype krever ikke underklassering, men den krever en initialiseringsoperasjon. Fabrikkmetode krever underklassering, men krever ikke initialisering.
  • Fordelen med en fabrikkmetode er at den kan returnere den samme forekomsten flere ganger, eller kan returnere en underklasse i stedet for et objekt av den nøyaktige typen.
  • Noen talsmenn for Factory Method anbefaler at det som et spørsmål om språkdesign (eller mislykkes det, som et spørsmål om stil ) absolutt alle konstruktører bør være private eller beskyttet. Det handler ikke om en klasse produserer et nytt objekt eller resirkulerer et gammelt.
  • new operatøren anses skadelig. Det er en forskjell mellom å be om et objekt og lage et. new -operatøren oppretter alltid et objekt og klarer ikke å kapsle opprettelsen av objektet.En fabrikkmetode håndhever den innkapslingen, og lar en gjenstand forespørres uten uløselig kobling til skaperhandlingen.

Støtt vår gratis nettside og eier e-boken!

  • 22 designmønstre og 8 prinsipper forklart i dybden
  • 406 velstrukturerte, lettleste, jargongfrie sider
  • 228 klare og nyttige illustrasjoner og diagrammer
  • Et arkiv med kodeeksempler på 4 språk
  • Alle støttede enheter: EPUB / MOBI / PDF-formater

Lær mer …

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *