Der kendes 3 inkarnationer af mønstret; simple, method og abstract.
De har alle det tilfælles, at objekt instantiering flyttes fra konkret
til abstrakt. Hver gang du i kode benytter "new", koder du op imod en
konkret klasse hvilket kan skabe problemer med modellérbare "real-world"
objekter.
- Simple Factory / Static Factory:
Med konkrete implementationer spredt rundt i koden, bliver
vedligeholdelse et problem og du kan ikke bare lige erstatte med et
andet objekt. Ved at lave konstruktøren af et objekt "private"
forhindrer du at kode bruger "new" direkte på den. Istedet laver du en
dedikeret statisk metode som opretter et nyt objekt og returnerer
instansen til dig.
- Factory Method:
Definerer et interface (eller abstrakt klasse) for instantiering af
objekter og lader sub-klasser bestemme (via polymorfisme) hvilken
konkret klasse der skal instantieres ligesom du kan smide argumenter med
og benytte disse. Denne løsere kobling giver væsentlig flere mulighedder
end den simple factory.
- Abstract Factory:
Den mest avancerede version baserer sig også på interfaces, men gør det
muligt via komposition, at kæde objekt familier sammen UDEN at du
behøver specificere deres konkrete klasser/implementationer. Den er
måske lidt svær at forstå, tænk på denne som et "framework" for
relaterede klasser i et hieraki som alle har forskellige implementationer.
Ellers kan jeg anbefale bogen "Head First Design Patterns", du kan også
bare nøjes med at se deres eksempler som downloades fra
http://www.wickedlysmart.com/HeadFirst/HeadFirstDesignPatterns/HeadFirstPatternsIndex.html
/Casper Bang