Das Brückenmuster in Java

1. Übersicht

Die offizielle Definition für das von Gang of Four (GoF) eingeführte Bridge-Entwurfsmuster besteht darin, eine Abstraktion von ihrer Implementierung zu entkoppeln, damit die beiden unabhängig voneinander variieren können.

Dies bedeutet, eine Bridge-Schnittstelle zu erstellen, die OOP-Prinzipien verwendet, um Verantwortlichkeiten in verschiedene abstrakte Klassen aufzuteilen.

2. Beispiel für ein Brückenmuster

Für das Brückenmuster betrachten wir zwei Abstraktionsebenen. Eine ist die geometrische Form (wie Dreieck und Quadrat), die mit verschiedenen Farben gefüllt ist (unsere zweite Abstraktionsschicht):

Zuerst definieren wir eine Farboberfläche:

public interface Color { String fill(); }

Jetzt erstellen wir eine konkrete Klasse für diese Schnittstelle:

public class Blue implements Color { @Override public String fill() { return "Color is Blue"; } }

Erstellen wir nun eine abstrakte Shape- Klasse, die aus einer Referenz (Brücke) zum Color- Objekt besteht:

public abstract class Shape { protected Color color; //standard constructors abstract public String draw(); }

Wir werden nun eine konkrete Klasse von Formschnittstellen erstellen, die auch die Methode der Farbschnittstelle verwenden:

public class Square extends Shape { public Square(Color color) { super(color); } @Override public String draw() { return "Square drawn. " + color.fill(); } }

Für dieses Muster gilt die folgende Behauptung:

@Test public void whenBridgePatternInvoked_thenConfigSuccess() { //a square with red color Shape square = new Square(new Red()); assertEquals(square.draw(), "Square drawn. Color is Red"); }

Hier verwenden wir das Bridge-Muster und übergeben das gewünschte Farbobjekt. Wie wir in der Ausgabe sehen können, wird die Form mit der gewünschten Farbe gezeichnet:

Square drawn. Color: Red Triangle drawn. Color: Blue

3. Fazit

In diesem Artikel haben wir uns das Muster des Brückendesigns angesehen. Dies ist in folgenden Fällen eine gute Wahl:

  • Wenn eine übergeordnete abstrakte Klasse die Grundregeln definieren und die konkreten Klassen zusätzliche Regeln hinzufügen sollen
  • Wenn wir eine abstrakte Klasse haben, die einen Verweis auf die Objekte hat, und abstrakte Methoden, die in jeder der konkreten Klassen definiert werden

Der vollständige Quellcode für dieses Beispiel ist auf GitHub verfügbar.