Muster: Bridge

Aus Wikibooks

Brücke[Bearbeiten]

Eine Brücke (eng. bridge) gehört zur Kategorie der Strukturmuster (Structural Patterns). Das Muster dient zur Trennung der Implementierung von ihrer Abstraktion, der Schnittstelle, wodurch beide unabhängig voneinander verändert werden können.

Verwendung[Bearbeiten]

Problem[Bearbeiten]

Normalerweise wird eine Implementierung durch Vererbung ihrer Abstraktion realisiert. Dies kann jedoch dazu führen, dass die Vererbungshierarchie sowohl konkrete als auch abstrakte Klassen ungeordnet beinhaltet. Die Hierarchie wird dadurch unübersichtlich und schwer wartbar.

Lösung[Bearbeiten]

Werden die Abstraktionen und die Implementierungen in zwei getrennten Hierarchien verwaltet, so gewinnen sie Übersichtlichkeit. Außerdem wird die Unabhängigkeit der Schnittstelle der Anwendung zu ihrer Implementierung gesteigert.

Lösung
Lösung

Allgemeine Verwendung[Bearbeiten]

Eine Brücke findet Anwendung, wenn

  • Abstraktion und Implementierung unabhängig voneinander erweiterbar sein sollen,
  • eine dauerhafte Verbindung zwischen Abstraktion und Implementierung verhindert werden soll,
  • Änderungen der Implementierung ohne Auswirkungen auf die Schnittstelle des Klienten sein sollen,
  • die Implementierung vor dem Klienten verborgen bleiben soll oder
  • die Implementierung von verschiedenen Klassen gleichzeitig genutzt werden soll.

UML-Diagramm[Bearbeiten]

Akteure[Bearbeiten]

  • Abstraktion (im Beispiel: List)
    • definiert die Schnittstelle der Abstraktion
    • hält eine Referenz zu einem Implementierer
  • SpezAbstraktion (im Beispiel: SortedList)
    • erweitert die Schnittstelle
  • Implementierer (im Beispiel: ListImpl)
    • definiert die Schnittstelle der Implementierung
    • kann sich von Schnittstelle der Abstraktion erheblich unterscheiden
  • KonkrImplementierer (im Beispiel: ArrayList)
    • enthält eine konkrete Implementierung durch Implementierung der Schnittstelle

Vorteile[Bearbeiten]

  • Abstraktion und Implementierung werden entkoppelt.
  • Die Implementierung ist während der Laufzeit dynamisch änderbar.
  • Die Erweiterbarkeit von Abstraktion und Implementierung ist verbessert.
  • Durch Angabe eines Parameters bei der Erzeugung einer Abstraktion kann die Implementierung gewählt werden.
  • Für den Klienten wird die Implementierung vollständig versteckt.
  • Vermeidung einer starken Vergrößerung der Anzahl der Klassen.

Nachteile[Bearbeiten]

  • Keine Implementierung von Funktionalität in abstrakten Klassen erlaubt.

Beispiel[Bearbeiten]

...

Verwandte Entwurfsmuster[Bearbeiten]

Zum Erzeugen der Brücke kann eine Abstrakte Fabrik verwendet werden.

Ein Adapter ist der Brücke ähnlich. Jedoch dient der Adapter einer nachträglichen Anpassung einer Klasse an eine Anwendung, während die Brücke eine gezielte Designentscheidung ist.