Fabriksmetod Designmönster
Syfte
- Definiera ett gränssnitt för att skapa ett objekt, men låt underklasserna bestämma vilken klass som ska initieras. Fabriksmetoden gör det möjligt för en klass att avinstallera underklasser.
- Definiera en ”virtuell” konstruktör.
-
new
-operatören anses vara skadlig.
Problem
Ett ramverk behöver standardisera den arkitektoniska modellen för en rad applikationer, men möjliggöra för enskilda applikationer att definiera sina egna domänobjekt och tillhandahålla deras instantiering.
Diskussion
Fabriksmetoden är att skapa objekt eftersom mallmetoden är att implementera en algoritm. En superklass specificerar allt standardgeneriskt beteende (med rena virtuella ”platshållare” för skapelsesteg) och delegerar sedan skapande detaljer till underklasser som levereras av klienten.
Fabriksmetoden gör en design mer anpassningsbar och bara lite mer komplicerat. Andra designmönster kräver nya klasser, medan Factory-metoden bara kräver en ny operation.
Människor använder ofta Factory Method som det vanliga sättet att skapa objekt, men det är inte nödvändigt om: den klass som aldrig instanseras förändringar eller instansering sker i en operation som underklasser lätt kan överstyras (t.ex. en initialiseringsoperation).
Fabriksmetoden liknar Abstrakt fabrik men utan betonfamiljer.
Fabriksmetoder specificeras rutinmässigt av ett arkitektoniskt ramverk och implementeras sedan av användaren av ramverket.
Struktur
Implementeringen av Factory Method som diskuteras i Gang of Four (nedan) överlappar till stor del den för Abstract Factory. För den anledningen fokuserar presentationen i detta kapitel på det tillvägagångssätt som har blivit populärt sedan dess.
En allt populärare definition av fabrik metoden är: en static
-metod för en klass som returnerar ett objekt av den typen av klassen. Men till skillnad från en konstruktör kan det faktiska objektet som den returnerar vara en förekomst av en underklass. Unlikea-konstruktör, en befintligt objekt kan återanvändas istället för ett nytt objekt som skapats. Till skillnad från en konstruktör har fabriksmetoden olika och mer beskrivande namn (t.ex. Color.make_RGB_color(float red, float green, float blue)
och Color.make_HSB_color(float hue, float saturation, float brightness)
Klienten är helt frikopplad från implementeringsdetaljerna för härledda klasser. Polymorf skapande är nu möjlig.
Exempel
Fabriksmetoden definierar ett gränssnitt för att skapa objekt, men låter underklasser bestämma vilka klasser som ska startas. Formsprutpressar visar detta mönster. Tillverkare av plastleksaker bearbetar plastgjutningspulver och injicerar plasten i formar av önskad form. Klassen leksak (bil, actionfigur etc.) bestäms av formen.
Kontrollista
- Om du har en arvshierarki som utövar polymorfism kan du överväga att lägga till en polymorf kapacitet genom att definiera en
static
fabriksmetod i basklassen. - Designa argumenten till fabriksmetoden. Vilka egenskaper eller egenskaper är nödvändiga och tillräckliga för att identifiera den korrekta härledda klassen för att starta?
- Överväg att utforma en intern ”objektpool” som gör att objekt kan återanvändas istället för att skapas från grunden.
- Överväg gör alla konstruktörer
private
ellerprotected
.
tumregler
- Abstrakta fabriksklasser implementeras ofta med fabriksmetoder, men de kan implementeras med prototyp.
- Fabriksmetoder kallas vanligtvis inom mallmetoder.
- Fabriksmetod: skapande genom arv . Prototyp: skapande genom delegering.
- Design börjar ofta med Factory Method (mindre komplicerat, mer anpassningsbart, underklasser sprider sig) och utvecklas mot AbstractFactory, Prototype eller Builder (mer flexibel, mer komplex) när designern upptäcker var mer flexibilitet behövs.
- Prototyp kräver inte underklassning, men det kräver en initialiseringsoperation. Fabriksmetoden kräver underklassning, men kräver inte initialisering.
- Fördelen med en fabriksmetod är att den kan returnera samma inställning flera gånger, eller kan returnera en underklass snarare än ett objekt av exakt typ.
- Vissa förespråkare för fabriksmetoder rekommenderar att det som en fråga om språkdesign (eller om det misslyckas, som en stilstil ) absolut alla byggare bör vara privata eller skyddade. Det handlar inte om en klass tillverkar ett nytt objekt eller återvinner ett gammalt.
-
new
operatören anses skadlig. Det finns en skillnad mellan att begära ett objekt och skapa ett.new
-operatören skapar alltid ett objekt och misslyckas med att inkapsla skapandet av objekt.En fabriksmetod tvingar den inkapslingen och tillåter att ett objekt begärs utan oupplöslig koppling till skapelsen.
Stöd vår kostnadsfria webbplats och äg e-boken!
- 22 designmönster och 8 principer förklarade på djupet
- 406 välstrukturerade, lättläst, jargongfria sidor
- 228 tydliga och hjälpsamma illustrationer och diagram
- Ett arkiv med kodexempel på fyra språk
- Alla enheter som stöds: EPUB / MOBI / PDF-format
Läs mer …