woensdag 27 juni 2007

Design Patterns in .Net deel I

Hallo daar!,

Ik begin hiermee aan een seria artikelen over design patterns in .Net

Zodra ik het programmeren een beetje door had (jaren geleden) kwam ik erachter dat sommige code API's best lastig werken.

Het maken van een Form met controls of het gebruiken van een Stream werkt heel anders. Na het gebruiken van Static functies vroeg ik mij af waar al die methodes (die in veel verschillende programmeer talen heel erg op elkaar lijken) nou toch vandaan komen.

Nu had ik al wat gelezen over OO en wist ik dat interfaces duidelijk een definitie gaven van hoe een stuk code werkt was dat niet wat ik zocht. Verder was het antwoord: "Zo doen wij het al jaren" ook niet je van het. Toen ik erachter kwam dat Sockets zowel in Java, C++ als in C# hetzelfde werkten werd ik nog steeds niets wijzer.

Totdat ik in een stuk code een singleton tegen kwam. Een Singleton bleek een object te zijn dat als een Design Pattern (ontwikkel patroon) in veel code gebruikt kan worden. Een design pattern is een oplossing voor een veel voorkomend programmeer probleem met daarin een vaste groep classes die met een duidelijke naam op een vaste manier samen werken.

Een singleton bied een object aan dat slechts een keer in het geheugen aanwezig, door verschillende andere classes gebruikt kan worden. (bijvoorbeeld static objects)

Omdat door de static functie GetInstance een compleet object word geleverd kan je met het een instantie van het object werken zonder dat je het met new hoeft aan te maken.

In deze Singleton kan je vervolgens globale settings, grote objecten of Applicatie status bijhouden. Ook kan een singleton goed een resource waar er maar een van is bewaren.

Een singleton kan je eenvoudig maken door de new functie static te maken en een functie getInstance met als return de class zelf. (das dan niet thread safe)

Een singleton of static object komt veel voor in de .Net api. Deze static object zijn op een makkelijke manier waar dan ook in je code te gebruiken. (Denk aan HttpContext op een asp.net omgeving)

Geen opmerkingen: