Fabrieksmethode is een creatief ontwerppatroon, d.w.z. gerelateerd aan het maken van objecten. In het fabriekspatroon maken we een object zonder de aanmaaklogica aan de klant bloot te stellen en de klant gebruikt dezelfde gemeenschappelijke interface om een nieuw type object te maken.
Het idee is om een statische lidfunctie te gebruiken (statische fabrieksmethode) die & retourneert instanties en verbergt de details van klassemodules voor de gebruiker.
Een fabriekspatroon is een van de belangrijkste ontwerpprincipes om een object te maken, waardoor klanten objecten kunnen maken van een bibliotheek (hieronder uitgelegd) op een zodanige manier dat deze geen nauwe koppeling heeft met de klassenhiërarchie van de bibliotheek.
Wat wordt bedoeld als we het hebben over bibliotheek en clients?
Een bibliotheek is iets dat wordt geleverd door een derde partij die enkele openbare API’s blootlegt en clients bellen naar die openbare API’s om hun taak te voltooien. Een heel eenvoudig voorbeeld kunnen verschillende soorten weergaven zijn die door Android OS worden geboden.
Waarom fabriekspatroon?
Laten we het begrijpen met een voorbeeld:
Uitvoer:
I am two wheeler
Wat zijn de problemen met het bovenstaande ontwerp?
Zoals je in het bovenstaande voorbeeld hebt opgemerkt, maakt Client objecten van TwoWheeler of FourWheeler op basis van input tijdens het construeren van zijn object.
Stel dat de bibliotheek een nieuwe klasse ThreeWheeler introduceert waarin ook driewielige voertuigen kunnen worden geïntegreerd. Wat zou er gebeuren? De klant zal uiteindelijk een nieuwe anders koppelen als hij in de voorwaardelijke ladder staat om objecten van ThreeWheeler te maken. Waarvoor op zijn beurt Client opnieuw moet worden gecompileerd. Dus elke keer dat er een nieuwe wijziging wordt aangebracht aan de bibliotheekkant, moet de klant aan het einde een aantal overeenkomstige wijzigingen aanbrengen en de code opnieuw compileren. Klinkt slecht? Dit is een zeer slechte manier van ontwerpen.
Hoe het probleem te vermijden?
Het antwoord is: maak een statische (of fabrieks) methode. Laten we de onderstaande code bekijken.
Uitvoer:
I am three wheeler
In het bovenstaande voorbeeld hebben we de selectie van het type voor objectcreatie van Client volledig ontkoppeld. De bibliotheek is nu verantwoordelijk om te beslissen welk objecttype moet worden gemaakt op basis van een invoer. De klant hoeft alleen maar te bellen naar de fabriek Create-methode van de bibliotheek en het gewenste type door te geven zonder zich zorgen te maken over de daadwerkelijke implementatie van het maken van objecten.
Met dank aan Rumplestiltskin voor het geven van bovenstaande uitleg.
Andere voorbeelden van fabrieksmethode:
- Stel dat in een ‘Tekensysteem’, afhankelijk van de invoer van de gebruiker, verschillende afbeeldingen zoals vierkant, rechthoek, cirkel kunnen worden getekend. Hier kunnen we de fabrieksmethode gebruiken om instanties te maken, afhankelijk van de invoer van de gebruiker. Voor het toevoegen van een nieuw type vorm, hoeft u de code van de klant niet te wijzigen.
- Een ander voorbeeld: op de reissite kunnen we zowel treinkaartjes als buskaartjes en vliegticket boeken. In dit geval kan de gebruiker zijn reistype opgeven als ‘bus’, ‘trein’ of ‘vlucht’.
Hier hebben we een abstracte klasse ‘AnyTravel’ met een statische lidfunctie ‘GetObject’ die, afhankelijk van het reistype van de gebruiker, create & retourobject van ‘BusTravel’ of ‘TrainTravel’. ‘BusTravel’ of ‘TrainTravel’ hebben gemeenschappelijke functies zoals passagiersnaam, vertrekpunt en bestemmingsparameters.
Met dank aan Abhijit Saha die de eerste 2 voorbeelden geeft.