Fabriksmetode Designmønster
Hensigt
- Definer en grænseflade til oprettelse af et objekt, men lad underklasser bestemme hvilken klasse der skal instantieres. Fabriksmetoden tillader en klasseudskydelse til underklasser.
- Definition af en “virtuel” konstruktør.
-
new
-operatøren betragtes som skadelig.
Problem
En ramme skal standardisere den arkitektoniske model til en række applikationer, men tillade individuelle applikationer at definere deres egne hovedobjekter og sørge for deres instantiering.
Diskussion
Fabriksmetoden er at oprette objekter, da skabelonmetode er at implementere en algoritme. En superklasse angiver al almindelig og generisk adfærd (ved hjælp af rene virtuelle “pladsholdere” til skabelsestrin) og delegerer derefter oprettelsesdetaljerne til underklasser, der leveres af klienten.
Fabriksmetoden gør et design mere tilpasset og kun lidt mere kompliceret. Andre designmønstre kræver nye klasser, mens Factory-metoden kun kræver en ny handling.
Folk bruger ofte Factory Method som standard måde at oprette objekter på, men det er ikke nødvendigt, hvis: den klasse, der er instantieret, aldrig ændringer eller instantiering finder sted i en operation, som underklasser let kan overstyre (f.eks. en initialiseringshandling).
Fabriksmetoden ligner Abstrakt fabrik, men uden vægtfamilier.
Fabriksmetoder er rutinemæssigt specificeret af en arkitektonisk ramme og implementeres derefter af brugeren af rammen.
Struktur
Implementeringen af Factory Method, der er diskuteret i Gang of Four (nedenfor), overlapper stort set det fra Abstract Factory. Af denne grund fokuserer præsentationen i dette kapitel på den tilgang, der er blevet populær siden.
En stadig mere populær definition af fabrik metode er: en static
metode til en klasse, der returnerer et objekt af den klasse “-type. Men i modsætning til en konstruktør kan det faktiske objekt, som det returnerer, være en forekomst af en underklasse. Unlikea-konstruktør, en Eksisterende objekt kan genbruges i stedet for et nyt objekt oprettet. I modsætning til en konstruktør kan fabriksmetoder have forskellige og mere beskrivende navne (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 afkoblet fra implementeringsdetaljerne for afledte klasser. Polymorf oprettelse er nu mulig.
Eksempel
Fabriksmetoden definerer en grænseflade til oprettelse af objekter, men lader underklasser bestemme, hvilke klasser der skal instantieres. Sprøjtestøbningstryk demonstrerer det her mønster. Producenter af plastlegetøj forarbejder plaststøbepulver og injicerer plasten i forme med de ønskede former. Klassen af legetøj (bil, actionfigur osv.) Bestemmes af formen.
Tjekliste
- Hvis du har et arvehierarki, der udøver polymorfisme, kan du overveje at tilføje en polymorf oprettelsesfunktion ved at definere en
static
fabriksmetode i basisklassen. - Design argumenterne til fabriksmetoden. Hvilke egenskaber eller karakteristika er nødvendige og tilstrækkelige til at identificere den korrekte afledte klasse til instantiering?
- Overvej at designe en intern “objektpulje”, der gør det muligt at genbruge genstande i stedet for at skabe dem fra bunden.
- Overvej gør alle konstruktører
private
ellerprotected
.
Tommelfingerregler
- Abstrakte fabriksklasser implementeres ofte med fabriksmetoder, men de kan implementeres ved hjælp af prototype.
- Fabriksmetoder kaldes normalt inden for skabelonmetoder.
- Fabriksmetode: oprettelse gennem arv . Prototype: skabelse gennem delegering.
- Design starter ofte ved hjælp af Factory Method (mindre kompliceret, mere tilpasselig, underklasser spreder sig) og udvikler sig mod AbstractFactory, Prototype eller Builder (mere fleksibel, mere kompleks) som designeren opdager, hvor mere fleksibilitet er nødvendig.
- Prototype kræver ikke underklassificering, men det kræver en initialisering. Fabriksmetoden kræver underklassificering, men kræver ikke initialisering.
- Fordelen ved en fabriksmetode er at det kan returnere den samme instans flere gange eller kan returnere en underklasse snarere end et objekt af den nøjagtige type.
- Nogle fabriksmetodeforkæmpere anbefaler, at det som et spørgsmål om sprogdesign (eller svigter det som et spørgsmål om stil ) absolutte alle konstruktører skal være private eller beskyttede. Det er ingen forretning, om en klasse fremstiller et nyt objekt eller genbruger et gammelt.
-
new
-operatøren betragtes som skadelig. Der er forskel på at anmode om et objekt og oprette et.new
-operatøren opretter altid et objekt og undlader at indkapsle oprettelsen af objektet.En fabriksmetode håndhæver den indkapsling og giver mulighed for at anmode om et objekt uden uadskillelig kobling til skabelseshandlingen.
Støt vores gratis websted og ejer e-bogen!
- 22 designmønstre og 8 principper forklaret i dybden
- 406 velstrukturerede, lette at læse, jargonfrie sider
- 228 klare og nyttige illustrationer og diagrammer
- Et arkiv med kodeeksempler på 4 sprog
- Alle understøttede enheder: EPUB / MOBI / PDF-formater
Få flere oplysninger …