Brückenmusterverständnis

7

Ich verstehe Brückenmuster in gewissem Maße. Ich verstehe die Entkopplung von Interface und Implementierung. Es verwendet eine Klasse implementor wie ein Plugin, das die tatsächliche Logik der Implementierung der abgeleiteten Klasse enthält.

Aber kann jemand erklären, wie es der Schnittstelle erlaubt und abgeleitet wird, um sich unabhängig zu entwickeln? Wenn ich der Schnittstelle eine neue Methode hinzufügen möchte, muss sie in der abgeleiteten Klasse implementiert werden, die sie modifiziert.

Zweitens muss der Client-Code geändert werden, um den neuen Implementierer festzulegen, wenn ein neues Objekt benötigt wird.

    
Chandan 10.06.2013, 02:01
quelle

3 Antworten

19

Ja, die Absicht des Brückenmusters besteht darin, die Abstraktion (d. h. die Schnittstelle) von der Implementierung zu entkoppeln, um sie unabhängig variieren zu lassen. In der Praxis besteht die Idee darin, anstelle der klassischen Einzelhierarchie zwei separate Hierarchien zu verwenden.

Lassen Sie uns ein Beispiel geben. Angenommen, Sie haben eine Window -Abstraktion, und Sie müssen eine IconWindow-Unterklasse erstellen, die auf Window für jede unterstützte Plattform spezialisiert ist.

Mit einer einzigen Hierarchie erhalten Sie:

%Vor%

Diese Struktur ist sehr unpraktisch, weil:

  • Wenn Sie eine neue Unterklasse hinzufügen möchten, die auf Fenster spezialisiert ist (z. B. BitmapWindow), müssen Sie für jede unterstützte Plattform eine Unterklasse erstellen (dh in diesem Beispiel drei Unterklassen).

  • Wenn Sie eine unterstützte Plattform hinzufügen möchten, müssen Sie für jede vorhandene Spezialisierung eine neue Unterklasse hinzufügen.

Daher ist es besser, die beiden Hierarchien zu entkoppeln:

%Vor%

Fenster und WindowImp sind Schnittstellen. IconWindow verwendet Methoden, die von Window bereitgestellt werden. Window ruft wiederum die zugehörige Methode für imp auf.

Die Beziehung zwischen Window und WindowImp wird als Bridge bezeichnet.

Beispiel: IconWindow :: DrawBorder () verwendet Window :: DrawRect (), das imp- & gt; DevDrawLine () aufruft, das in WindowImp deklariert und in den konkreten Unterklassen definiert ist (zB in der Klasse XWindowImp).

Mein Vorschlag ist, das Buch zu lesen: Entwurfsmuster - Elemente wiederverwendbarer objektorientierter Software "( Ссылка ) enthält das obige Beispiel.

    
Claudio 10.06.2013, 09:32
quelle
2

Ich denke Java JDBC API ist das beste Beispiel, um den Benutzer von Bridge Design Pattern zu veranschaulichen. Der Client verwendet die Abstraktion (JDBC-API), ohne sich Gedanken über die Implementierung (MYSQL, Oracle usw.) machen zu müssen, die von verschiedenen SQL-Anbietern bereitgestellt wird.

Um zu veranschaulichen, dass Sie über EmployeeDAOImpl verfügen, das die EmployeeDAO-Schnittstelle mit den Methoden zum Speichern, Aktualisieren und Löschen implementiert, sollten Sie Folgendes beachten. Nun verwendet diese EmployeeDAOImpl die JDBC-API (Abstraction), um die CRUD-Operationen auszuführen, ohne sich um die verwendete Datenbank kümmern zu müssen. Das einzige, was EmployeeDAOImpl benötigt, ist die URL zum Laden des Treibers.

Jetzt ist die Crux, die Hierarchie von EmployeeDAOImpl und anderen DAO kann unabhängig voneinander variieren. Sie müssen sich keine Gedanken über die Implementierung der Abstraktionen der JDBI-API machen.

    
Atul 10.06.2013 07:05
quelle
0

Brückenmuster:

  • Entkoppeln Sie eine Abstraktion von ihrer Implementierung, so dass die beiden unabhängig voneinander variieren können;

  • Strukturelle Muster;

  • Das Brückenmuster ist ein Entwurfsmuster, das in der Softwareentwicklung verwendet wird, um "eine Abstraktion von ihrer Implementierung zu entkoppeln, sodass beide unabhängig voneinander variieren können". Die Bridge verwendet Kapselung und Aggregation und kann Vererbung verwenden, um Verantwortlichkeiten in verschiedene Klassen zu trennen;

  • Wenn eine Klasse oft variiert, werden die Merkmale der objektorientierten Programmierung sehr nützlich, da Änderungen am Code eines Programms leicht mit minimalem Vorwissen über das Programm vorgenommen werden können. Das Brückenmuster ist nützlich, wenn sowohl die Klasse als auch das, was sie tut, oft variiert. Die Klasse selbst kann als Implementierung betrachtet werden und was die Klasse als Abstraktion tun kann. Das Brückenmuster kann auch als zwei Abstraktionsschichten betrachtet werden;

  • Das Brückenmuster wird oft mit dem Adaptermuster verwechselt. Tatsächlich wird das Brückemuster häufig unter Verwendung des Klassenadaptermusters implementiert;

  • Variante: Die Implementierung kann noch weiter entkoppelt werden, indem das Vorhandensein der Implementierung auf den Punkt verschoben wird, an dem die Abstraktion verwendet wird.

Malf 01.02.2016 09:39
quelle

Tags und Links