Proxy-, decorateur-, adapter- en brugpatronen
1. Inleiding
In dit artikel gaan we ons concentreren op structurele ontwerppatronen in Java - en bespreken we wat deze zijn en enkele fundamentele verschillen tussen sommige ervan.
2. Structurele ontwerppatronen
Volgens de Gang Of Four (GoF) kunnen ontwerppatronen in drie typen worden ingedeeld:
- Creatief
- Structureel
- Gedragsmatig
Simpel gezegd, structurele patronen hebben te maken met de samenstelling van klassen en objecten. Ze bieden verschillende manieren om de compositie en overerving van objecten te gebruiken om enige abstractie te creëren.
3. Proxypatroon
Met dit patroon, we creëren een tussenpersoon die fungeert als een interface naar een andere bron, bijv. een bestand, een verbinding. Deze secundaire toegang biedt een surrogaat voor de echte component en beschermt deze tegen de onderliggende complexiteit.
Voor een gedetailleerd voorbeeld van het patroon, bekijk de speciale post: The Proxy Pattern in Java.
Belangrijkste punten van differentiatie:
- De proxy biedt dezelfde interface als het object waarnaar het verwijst, en het verandert de gegevens op geen enkele manier; het is in tegenstelling tot Adapter- en Decorator-patronen die respectievelijk de functionaliteiten van reeds bestaande instanties veranderen en verfraaien
- De proxy heeft meestal de informatie over het echte onderwerp tijdens het compileren zelf, terwijl Decorator en Adapter tijdens runtime worden geïnjecteerd en alleen de interface van het werkelijke object kennen
4. Decorateur patroon
Dit patroon is handig om het gedrag van een object te verbeteren. Bekijk voor een gedetailleerd overzicht de gerichte tutorial hier: Decorateurpatroon in Java
Belangrijkste punten van differentiatie:
- Hoewel proxy- en decorateurpatronen vergelijkbare structuren hebben, verschillen ze in intentie; terwijl het voornaamste doel van proxy het gebruiksgemak of gecontroleerde toegang is, legt een decorateur extra verantwoordelijkheden vast
- Zowel proxy- als adapterpatronen bevatten een verwijzing naar het oorspronkelijke object
- Alle decorateurs uit dit patroon kunnen oneindig vaak recursief worden gebruikt, wat niet mogelijk is met andere modellen
5. Adapterpatroon
Het adapterpatroon wordt gebruikt voor het verbinden van twee incompatibele interfaces die anders niet rechtstreeks kunnen worden aangesloten. Een adapter omhult een bestaande klasse met een nieuwe interface zodat deze compatibel wordt met de benodigde interface.
Voor een gedetailleerde beschrijving en implementatie, bekijk de speciale post: Adapterpatroon in Java
De belangrijkste verschillen tussen adapter- en proxypatronen zijn:
- Terwijl proxy dezelfde interface biedt, biedt Adapter een andere interface die compatibel is met zijn client
- Adapterpatroon wordt gebruikt nadat de applicatiecomponenten zijn ontworpen, zodat we ze kunnen gebruiken zonder de broncode te wijzigen. Dit in tegenstelling tot het Bridge-patroon, dat wordt gebruikt voordat de componenten worden ontworpen.
6. Brugpatroon
Het Bridge-patroon wordt gebruikt om een abstractie los te koppelen van de implementatie ervan zodat de twee onafhankelijk kunnen variëren.
Dit betekent dat een bridge-interface moet worden gemaakt die gebruikmaakt van OOP-principes om verantwoordelijkheden in verschillende abstracte klassen te verdelen.
Voor een gedetailleerde beschrijving en implementatie, bekijk de speciale post: Bridge Pattern in Java
Belangrijkste punten van differentiatie:
- Een bridge-patroon kan alleen worden geïmplementeerd voordat de applicatie is ontworpen.
- Staat een abstractie en implementatie toe om onafhankelijk te veranderen, terwijl een adapterpatroon het mogelijk maakt dat incompatibele klassen samenwerken
7. Conclusie
In dit artikel hebben we ons gericht op het structurele ontwerppatroon en de verschillen tussen sommige typen.
Zoals altijd is de volledige implementatie van deze tutorial te vinden op Github.