Muster: Bridge

BrückeBearbeiten

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.

VerwendungBearbeiten

ProblemBearbeiten

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ösungBearbeiten

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.

Allgemeine VerwendungBearbeiten

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-DiagrammBearbeiten

 

AkteureBearbeiten

  • 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

VorteileBearbeiten

  • 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.

NachteileBearbeiten

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

BeispielBearbeiten

...

Verwandte EntwurfsmusterBearbeiten

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.