For faster navigation, this Iframe is preloading the Wikiwand page for Decorator.

Decorator

Uit Wikipedia, de vrije encyclopedie

Decorator UML class diagram
Decorator UML class diagram

Een decorator is een ontwerppatroon voor objectoriëntatie dat dynamisch extra functionaliteit toevoegt aan een object. Dit is flexibeler dan uitbreiding van functionaliteit door middel van subklassen. Decorator behoort tot de structuurpatronen.

Toepassing

Het patroon is van toepassing in situaties waarbij aan objecten nu eens de ene en dan weer de andere functionaliteit toegevoegd wordt. Indien overerving gebruikt zou worden zou voor elke combinatie van functionaliteiten een subklasse geschreven moeten worden hetgeen al snel inefficiënt wordt in termen van onderhoudbaarheid van broncode.

Een ander voordeel is dat de functionaliteit ter plekke weer kan worden opgeheven.

Grootste nadeel is dat er een nieuw (decorator-)object gemaakt wordt terwijl bij overerving de functionaliteit aan hetzelfde object wordt toegevoegd.

Een andere methode om soortgelijke problematiek het hoofd te bieden is het strategy-patroon. Net als overerving wordt de functionaliteit aan hetzelfde object toegevoegd.

Gedrag

Structuur

UML diagram van het decoratorpatroon

Werking en eigenschappen

  • AbcComponent is een abstracte klasse (Abc staat voor Abstract base class)die de interface definieert waarmee een ComponentA-object aangeroepen wordt.
  • Een AbcDecorator-object geeft zich uit voor een ComponentA-object.
  • Wanneer AbcDecorator.Operation() aangeroepen wordt roept deze op zijn beurt ComponentA.Operation() aan.
  • DecoratorA- en DecoratorB-objecten voegen de functionaliteit toe.
  • Een decorator-object kan de plaats innemen van ComponentA, maar is wel een ander object.

Implementatie-overwegingen

  • De decorator moet de interface van de component implementeren. Dit is alleen mogelijk als hier bij het ontwerp van de component rekening mee is gehouden. Veel component-bibliotheken houden hier rekening mee.
  • Indien er slechts één functionaliteit toegevoegd hoeft te kunnen worden kunnen de klassen AbcDecorator en ComponentA samengevoegd worden tot één klasse. De Operation() methode voert in dat geval eerst de functionaliteit van ComponentA uit, en roept daarna de Operation() van de geaggregeerde component aan.
  • Houdt de klasse AbcComponent zo licht mogelijk door deze uitsluitend de interface te laten definiëren. Alle extra zaken maken de decorators onnodig zwaar.
{{bottomLinkPreText}} {{bottomLinkText}}
Decorator
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Wikiwand 2.0 is here 🎉! We've made some exciting updates - No worries, you can always revert later on