Brücke-Muster

Das Brücke-Muster ist ein Designmuster, das in der Softwaretechnik verwendet ist, die zu "decouple eine Abstraktion von seiner Durchführung gemeint wird, so dass sich die zwei unabhängig ändern können". Die Brücke verwendet encapsulation, Ansammlung, und kann Erbe verwenden, um Verantwortungen in verschiedene Klassen zu trennen.

Wenn sich eine Klasse häufig ändert, werden die Eigenschaften der objektorientierten Programmierung sehr nützlich, weil Änderungen zu einem Code eines Programms leicht mit minimalen vorherigen Kenntnissen über das Programm vorgenommen werden können. Das Brücke-Muster ist nützlich, wenn beide die Klasse, sowie was es wirklich häufig ändert. Von der Klasse selbst kann als die Durchführung gedacht werden, und was die Klasse als die Abstraktion tun kann. Vom Brücke-Muster kann auch als zwei Schichten der Abstraktion gedacht werden.

Das Brücke-Muster ist häufig mit dem Adapter-Muster verwirrt. Tatsächlich wird das Brücke-Muster häufig mit dem Klassenadapter-Muster z.B im javanischen Code unten durchgeführt.

Variante: Die Durchführung kann decoupled noch mehr durch das Aufschieben der Anwesenheit der Durchführung zum Punkt sein, wo die Abstraktion verwertet wird.

Struktur

Abstraktion

: definiert die abstrakte Schnittstelle

: erhält die Verweisung von Implementor aufrecht

RefinedAbstraction

: erweitert die Schnittstelle, die durch die Abstraktion definiert ist

Implementor

: definiert die Schnittstelle für Durchführungsklassen

ConcreteImplementor

: führt die Schnittstelle von Implementor durch

Beispiel

Das folgende Java (SE 6) Programm illustriert das 'Gestalt'-Beispiel, das unten angeführt ist, und wird Produktion:

API1.circle an 1.000000:2.000000 Radius 7.5000000

API2.circle an 5.000000:7.000000 Radius 27.500000

/ ** "Implementor" * /

verbinden Sie DrawingAPI {\

öffentliche Leere drawCircle (verdoppeln x, verdoppeln y, doppelten Radius);

}\

/ ** "ConcreteImplementor" 1/2 * /

Klasse DrawingAPI1 führt DrawingAPI {\durch

öffentliche Leere drawCircle (verdoppeln x, verdoppeln y, doppelten Radius), {\

System.out.printf ("API1.circle an %f: % f Radius %f\n", x, y, Radius);

}\}\

/ ** "ConcreteImplementor" 2/2 * /

Klasse DrawingAPI2 führt DrawingAPI {\durch

öffentliche Leere drawCircle (verdoppeln x, verdoppeln y, doppelten Radius), {\

System.out.printf ("API2.circle an %f: % f Radius %f\n", x, y, Radius);

}\}\

/ ** "Abstraktion" * /

abstrakte Klasse Shape {\

geschützter DrawingAPI drawingAPI;

geschützte Gestalt (DrawingAPI drawingAPI) {\

this.drawingAPI = drawingAPI;

}\

öffentliche abstrakte leere Attraktion ;//auf niedriger Stufe

öffentliche abstrakte Leere resizeByPercentage (verdoppeln pct);//auf höchster Ebene

}\

/ ** "Raffinierte Abstraktion" * /

Klasse CircleShape erweitert Gestalt {\

privater doppelter x, y, Radius;

öffentlicher CircleShape (verdoppeln x, verdoppeln y, doppelten Radius, DrawingAPI drawingAPI), {\

fantastisch (drawingAPI);

this.x = x; this.y = y; this.radius = Radius;

}\

//auf niedriger Stufe d. h. Durchführung spezifischer

öffentliche leere Attraktion {\

drawingAPI.drawCircle (x, y, Radius);

}\

//auf höchster Ebene d. h. Abstraktion spezifischer

öffentliche Leere resizeByPercentage (verdoppeln pct), {\

Radius * = pct;

}\}\

/ ** "Kunde" * /

Klasse BridgePattern {\

öffentliche statische leere Hauptsache (Schnur [] args) {\

Gestalt [] formt sich = neue Gestalt [] {\

neuer CircleShape (1, 2, 3, neuer DrawingAPI1 ),

neuer CircleShape (5, 7, 11, neuer DrawingAPI2 ),

};

für (Gestalt-Gestalt: Gestalten) {\

shape.resizeByPercentage (2.5);

shape.draw ;

}\

}\}\</Quelle>

Siehe auch

Links

  • Von:

George McFarland / Reifen
Impressum & Datenschutz