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

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.