Welkom bij deze tweede post in de reeks over patterns die wereldwijd toegepast worden bij het ontwerpen van software. Deze week behandel ik het Flyweight pattern zoals vast gelegd door de fameuze Gang of Four.
Het Flyweight pattern komt van pas wanneer je een groot aantal objecten verwacht die hetzelde zijn. Het meest tot de verbeelding sprekende voorbeeld is een tekst editor applicatie. Stel dat er voor elke individuel teken in deze post een apart object aangemaakt zou moeten. Ik heb het niet geteld maar ik vermoed dat de letter E het vaakst voorkomt. Het zou natuurlijk zonde zijn om over elke letter E geheugen te reserveren omdat ze allemaal hetzelde zijn.
Hoe werkt het Flyweight pattern? Eigenlijk heel erg simpel: implementeer een Factory klasse die verantwoordelijk is voor het instantieren van objecten om deze vervolgens te cachen. Wanneer de client code de Factory om een soortgelijk object vraagd geeft deze het reeds geinstantieerde object terug uit de cache in plaats van een nieuw object te instantieren. De Factory klasse werkt dus als volgt:
Pseudocode if (flyweightCache[parameters] exists) return existing flyweight else new flyweight(parameters) add flyweight to cache return flyweight
Zoals je ziet fungeert de Factory klasse in dit pattern als cache zonder dat de client code hier van af weet. De Factory klasse kun je zo intelligent maken als nodig is door bijvoorbeeld sommige object die echt vaak opgevraagd worden uit de cache te serveren, terwijl andere object wel elke keer geinstantieerd worden. Ook kan de Factory beoordelen of parameters er op duid dat het object een eigen unieke state heeft en dus niet uit de cache gehaald kan worden.
Wanneer is het Flyweight pattern geschikt? Als:
- De applicatie enorme hoeveelheden object gebruikt
- Het geheugen vol loopt
- De objecten hebben geen unieke state, of de state kan gemakkelijk ondergebracht worden in een ander minder gebruikt object
- De applicatie niet afhangkelijk is van de identiteit van deze objecten
Gerelateerde patterns:
- Value Object – Domain Driven Design
- Factory Pattern – Design Patterns
Dat is het voor deze week. Ik hoop dat je nu begrijpt hoe het Flyweight pattern werkt. Heb je nog vragen of opmerkingen? Plaats gerust een reactie!