Anwendungsfall:
Ein Objekt soll dynamisch um einzelne Funktionalitäten oder Zuständigkeiten erweitert werden. Diese Funktionalitäten sind beliebig kombinierbar. Decorator können als Altnerative für lange Vererbungsketten angesehen werden, bleiben dabei aber viel flexibler als Hierarchien.
Beispiele für die Anwendung:
UI-Elemente sollten je nach Verwendungszweck verschiedene zusätzliche Funktionalitäten oder Eigenschaften implementieren (Beispiel WebUserControls: einfacher Hyperlink, Hyperlink mit Contextmenü, Hyperlink mit JavaScript Funktionen)
Grafische Darstellung:

Beispielcode:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
IExtendedControl c0 = new SimpleLabel();
c0.Draw(Response);
Response.Write("<br>");
IExtendedControl c1 = new LableExtension1(new SimpleLabel());
c1.Draw(Response);
Response.Write("<br>");
IExtendedControl c2 = new LableExtension2(new SimpleLabel());
c2.Draw(Response);
Response.Write("<br>");
IExtendedControl c3 = new LableExtension2(new LableExtension1(new SimpleLabel()));
c3.Draw(Response);
}
}
Ausgabe des Beispielcodes:
I'm a simple Label
I'm a simple Label, decorated with LabelExtension1
I'm a simple Label, decorated with LabelExtension2
I'm a simple Label, decorated with LabelExtension1, decorated with LabelExtension2
Download der Anwendung:
DesignPatterns.zip (4.66 KB)