Factory Method forklaret: Skab fleksible objekter uden at binde koden til en klasse

Factory Method forklaret: Skab fleksible objekter uden at binde koden til en klasse

Når man udvikler software, handler meget af arbejdet om at skabe fleksible og genanvendelige løsninger. Et af de klassiske designmønstre, der hjælper med netop det, er Factory Method. Mønstret gør det muligt at oprette objekter uden at kende den præcise klasse, der skal instantieres – og det giver både bedre struktur og mindre afhængighed i koden.
I denne artikel ser vi på, hvad Factory Method er, hvorfor det bruges, og hvordan du kan implementere det i praksis.
Hvad er Factory Method?
Factory Method er et creational designmønster, der har til formål at håndtere oprettelsen af objekter på en fleksibel måde. I stedet for at skrive new direkte i koden, overlader man ansvaret for at skabe objekter til en særlig metode – en “fabrik”.
Det betyder, at du kan udskifte, udvide eller ændre, hvilken type objekt der bliver oprettet, uden at ændre den kode, der bruger objektet. Det er især nyttigt, når du arbejder med komplekse systemer, hvor flere klasser implementerer samme interface eller arver fra samme baseklasse.
Kort sagt: Factory Method adskiller hvordan et objekt bliver oprettet, fra hvordan det bliver brugt.
Hvorfor bruge Factory Method?
Der er flere grunde til, at Factory Method er et af de mest anvendte mønstre i objektorienteret programmering:
- Fleksibilitet: Du kan nemt tilføje nye typer objekter uden at ændre eksisterende kode.
- Løs kobling: Koden, der bruger objekterne, behøver ikke kende deres konkrete klasser.
- Bedre testbarhed: Du kan udskifte implementeringer med mock-objekter under test.
- Udvidelsesvenlighed: Nye varianter kan tilføjes ved at oprette nye fabriksmetoder eller subklasser.
Forestil dig for eksempel et program, der skal håndtere forskellige typer dokumenter – tekstfiler, PDF’er og billeder. I stedet for at skrive new PdfDocument() eller new TextDocument() direkte, kan du lade en fabriksmetode bestemme, hvilken type dokument der skal oprettes, afhængigt af brugerens valg eller filtypen.
Sådan fungerer mønstret i praksis
Factory Method består typisk af to dele:
- En abstrakt klasse eller et interface, der definerer en metode til at oprette objekter – fx
createProduct(). - En eller flere konkrete subklasser, der implementerer denne metode og bestemmer, hvilken type objekt der skal returneres.
Når klientkoden kalder fabriksmetoden, får den et objekt tilbage, der opfører sig som forventet, men uden at kende den præcise klasse bag.
Det gør det muligt at udvide systemet med nye typer produkter ved blot at tilføje nye fabriksimplementeringer – uden at ændre den eksisterende logik.
Et simpelt eksempel
Lad os tage et eksempel fra hverdagen i softwareudvikling: et program, der skal sende beskeder via forskellige kanaler – e-mail, SMS eller push-notifikationer.
I stedet for at skrive logik som:
“Hvis brugeren vælger e-mail, så opret en EmailSender. Hvis SMS, så opret en SmsSender.”
… kan du lade en fabriksmetode håndtere det. Den returnerer et objekt, der implementerer et fælles interface, fx MessageSender. Klientkoden behøver kun at kalde sender.send(message) – uden at vide, hvilken konkret klasse der står bag.
Resultatet er en mere elegant og vedligeholdelsesvenlig løsning, hvor nye sendertyper kan tilføjes uden at ændre eksisterende kode.
Fordele og ulemper
Som med alle designmønstre har Factory Method både styrker og svagheder.
Fordele:
- Gør koden mere modulær og udvidelsesvenlig.
- Reducerer afhængigheder mellem klasser.
- Understøtter principper som Open/Closed Principle – at kode skal være åben for udvidelse, men lukket for ændring.
Ulemper:
- Kan gøre koden mere kompleks, især i små projekter.
- Kræver flere klasser og abstraktioner, hvilket kan virke overdrevet, hvis behovet for fleksibilitet er begrænset.
Derfor er det vigtigt at bruge mønstret med omtanke – det er mest nyttigt i systemer, hvor du forventer, at nye typer objekter skal kunne tilføjes over tid.
Factory Method i moderne udvikling
Selvom Factory Method stammer fra de klassiske designmønstre i Gang of Four-bogen fra 1990’erne, er det stadig højaktuelt i moderne softwareudvikling.
I frameworks som Spring, .NET og Django bruges fabriksprincipper flittigt – ofte bag kulisserne – til at skabe objekter dynamisk. Også i dependency injection og plugin-arkitekturer spiller mønstret en central rolle.
Kort sagt: Factory Method er ikke bare et teoretisk mønster, men en praktisk tilgang, der gør din kode mere robust, fleksibel og fremtidssikret.
Konklusion
Factory Method er et af de mest nyttige værktøjer i værktøjskassen for enhver udvikler, der ønsker at skrive fleksibel og vedligeholdelsesvenlig kode.
Ved at lade fabriksmetoder håndtere oprettelsen af objekter, kan du undgå hårde koblinger, gøre systemet lettere at udvide og skabe en arkitektur, der holder – også når kravene ændrer sig.
Det er et mønster, der måske virker simpelt på overfladen, men som kan gøre en stor forskel i praksis.










