Introduktion til fabriksmønsteret
Et designmønster er en metode til at løse tilbagevendende problemer i softwaredesign. Fabriksmønstret er et af de designmønstre, der hjælper med at skabe objekter på en fleksibel og afkoblet måde.
Factory Pattern er et kreativt designmønster i C++, der giver mulighed for objektskabelse uden eksplicit at kende objektets klasse. Det giver en måde at indkapsle kompleks objektskabelseslogik i en separat fabriksklasse. Dette gøres ved at definere en fælles grænseflade til oprettelse af objekter, hvor den specifikke klasse af objektet bestemmes ved kørsel.
I stedet for at oprette et objekt direkte, bruger vi fabriksmetoden til at give os en forekomst af det objekt, vi ønsker. På denne måde kan vi skjule de komplicerede trin, der er involveret i at skabe objektet og gøre det lettere at ændre eller modificere objektet i fremtiden.
Hvorfor bruge fabriksmønsteret?
Der er flere grunde til, at vi måske vil bruge fabriksmønsteret. En grund er, at det tillader afkobling af kode fra specifikke klasser. Ved at bruge en fabriksmetode kan vi nemt skifte en klasse ud med en anden uden at skulle ændre nogen anden kode og gøre den mere effektiv.
En anden grund til at bruge fabriksmønsteret er, at det kan gøre koden mere testbar. Fabriksmønstre giver os mulighed for at teste kode ved at skabe falske objekter.
Her er nogle af de flere grunde til, at fabriksmønsteret bruges i C++:
- Factory Method-mønsteret bruges, når en klasse ikke på forhånd ved, hvilke objekter den skal oprette.
- Mønsteret bruges, når en klasse er afhængig af sine underklasser for at specificere de objekter, den opretter.
- Det er nyttigt, når du vil indkapsle logikken til at skabe et komplekst objekt på ét sted.
Eksempel på fabriksmønster i C++
I C++ kan vi implementere fabriksmønsteret ved at definere en abstrakt basisklasse med en virtuel fabriksmetode. Denne metode skal returnere en pointer til den ønskede klasseinstans. Derefter kan vi udlede konkrete klasser fra denne basisklasse og tilsidesætte fabriksmetoden for at returnere en forekomst af den relevante klasse.
Her er et eksempel på, hvordan vi kan bruge denne implementering af fabriksmønsteret:
#includebruger navneområde std ;
klasse Form {
offentlig :
virtuelle ugyldig tegne ( ) = 0 ;
statisk Form * skabe form ( int type ) ;
} ;
klasse Cirkel : offentlig form {
offentlig :
ugyldig tegne ( ) {
cout << 'Tegner en cirkel.' << endl ;
}
} ;
klasse rektangel : offentlig form {
offentlig :
ugyldig tegne ( ) {
cout << 'Tegner et rektangel.' << endl ;
}
} ;
Form * Form :: skabe form ( int type ) {
hvis ( type == 1 ) {
Vend tilbage ny cirkel ( ) ;
} andet hvis ( type == 2 ) {
Vend tilbage nyt rektangel ( ) ;
} andet {
Vend tilbage nullptr ;
}
}
int vigtigste ( ) {
Form * cirkel = Form :: skabe form ( 1 ) ;
cirkel -> tegne ( ) ;
Form * rektangel = Form :: skabe form ( 2 ) ;
rektangel -> tegne ( ) ;
Vend tilbage 0 ;
}
I dette eksempel har vi en Shape-klasse med to afledte klasser: Cirkel og Rektangel. Shape-klassen har en ren virtuel funktion draw(), som implementeres af de afledte klasser. Shape-klassen har også en statisk funktion createShape(int type), som fungerer som en fabriksmetode til at oprette forekomster af de afledte klasser baseret på den angivne type. Draw()-funktionen kaldes på de oprettede objekter for at demonstrere deres specifikke adfærd.
Konklusion
Factory Pattern er et kreativt designmønster i C++, der giver mulighed for objektskabelse uden eksplicit at kende objektets klasse. Det giver en forenklet grænseflade til at skabe objekter ved at skjule den komplekse oprettelseslogik bag en fabriksklasse. Dette gøres ved at definere en fælles grænseflade til oprettelse af objekter, hvor den specifikke klasse af objektet bestemmes ved kørsel. Læs mere om fabriksmønstre i denne artikel.