Terug naar begrippenlijst

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.

Geschreven door Thijn de Haas

Zwaaiende emoji

Thijn Lead developer

Meer over Thijn

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.

Thijn de Haas Lead developer

Meer over Thijn

Mijn programmeeravontuur begon rond mijn twaalfde, toen ik ontdekte dat je met code vrijwel alles kunt maken. Ik begon met het bouwen van kleine projecten en startte al snel mijn eigen hostingdienst, wat me veel leerde over maatwerkcode, serverbeheer en het koppelen aan websites. Deze kennis pas ik nu dagelijks toe in mijn werk aan websites en applicaties.

Als student Applicatieontwikkelaar liep ik drie stages bij Wux, waarbij ik tijdens de eerste stage mijn eerste bedrijf startte, deels op advies van Bo. Deze ervaringen vormden het fundament van mijn rol als lead developer en mede-eigenaar van Wux. Met een constante interesse in nieuwe technieken en het meedenken naar de beste oplossingen, zet ik mijn expertise dagelijks in om complexe vraagstukken op te lossen samen met mijn team.

Twee mannen in overleg tijdens het werk achter hun computerschermen
Zwaaiende emoji

Thijn Back-end developer

Op zoek naar slimme software-oplossingen die jouw bedrijf efficiënter maken?

Het team van Wux ontwikkelt maatwerk software die aansluit bij jouw behoeften. Neem vandaag nog contact op en ontdek hoe we jouw bedrijf elke dag succesvoller kunnen maken.

Meer over software