Singleton pattern
Het singleton pattern is als dat ene favoriete koffiezetapparaat op kantoor: er is er maar één, iedereen gebruikt ‘m, en niemand komt op het idee om er stiekem een tweede bij te zetten. In de programmeerwereld betekent het dat je van een klasse precies één exemplaar maakt dat overal toegankelijk is.
Inhoudsopgave
Altijd dezelfde: Handig en vertrouwd
Waarom zou je dit willen? Stel je hebt een logging-systeem dat foutmeldingen verzamelt. Je wilt niet dat elke module zijn eigen logboek bijhoudt, dat zou een chaos worden. Met een singleton maak je één centraal logboek dat alles netjes bij elkaar houdt. Zo houd je overzicht, want alle foutjes komen op dezelfde plek terecht.
Of denk aan een app met een centraal instellingenpaneel. Verander je iets bij scherm A, dan wil je dat scherm B die verandering meteen ziet. Dankzij het singleton pattern werken ze allemaal met dezelfde, gedeelde set instellingen.
Makkelijk, maar niet lui
Het singleton pattern is handig, maar niet bedoeld om overal zomaar op te plakken. Te veel singletons maken je code onvoorspelbaar en lastig te testen. Het is geen excuus om alles ‘even globaal te gooien’. Slim gebruik betekent dat je het alleen inzet als je echt één gedeelde versie nodig hebt die nooit mag veranderen in meerdere uitvoeringen.
Een goede regel: kun je iets vervangen door een losse parameter of dependency? Doe dat dan. Gebruik singleton alleen als het echt niet anders kan.
Zo werkt het in de praktijk
De truc achter het singleton pattern zit ‘m in hoe je de klasse maakt. In de meeste talen zorg je dat niemand zelf een nieuw exemplaar kan aanmaken. Je zet de constructor ‘op slot’ en regelt een speciale methode die de enige instantie teruggeeft. Is die er nog niet? Dan wordt hij één keer gemaakt. Als dat geregeld is, krijgt iedereen dezelfde versie. Zo simpel kan het zijn.
In Java gebruik je bijvoorbeeld een private constructor en een static getInstance()-methode. In Python los je het vaak op met een module die zichzelf gedraagt als singleton. Elke taal heeft zijn eigen slimmigheidje, maar het principe blijft hetzelfde: één keer maken, altijd gebruiken.
Veelgestelde vragen
Om te voorkomen dat er meerdere versies van hetzelfde object ontstaan, bijvoorbeeld bij config, logging of een databaseverbinding.
Het lijkt erop, maar een singleton is netter geregeld: je hebt meer controle en voorkomt dat iemand per ongeluk een tweede versie maakt.
Te veel singletons maken je code moeilijk te testen en onvoorspelbaar. Gebruik ze spaarzaam en met een goed plan.
Ja, maar er zijn alternatieven zoals dependency injection. Moderne developers kiezen wat past bij hun project.