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:

  1. Creatief
  2. Structureel
  3. 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.