Java-Entwurfsmuster (design pattern): Bridge

Heute werfen wir einen Blick auf das nächste Entwurfsmuster (Java design patterns) aus der Kategorie der strukturellen Muster (structural patterns) – Bridge. Entwurfsmuster in dieser Kategorie befassen sich mit Klassenstrukturen wie Vererbung (inheritance) und Komposition (composition). Lies mehr über Entwurfsmuster – eine Serie von Entwurfsmustern:

Bridge ist ein Entwurfsmuster, das in der Softwareentwicklung verwendet wird, um die Abstraktion von der Implementierung zu trennen, so dass die beiden Teile unabhängig voneinander geändert werden können. Dabei verwendet das Entwurfsmuster Bridge die Kapselung, Aggregation und kann die Vererbung nutzen, um Verantwortlichkeiten in verschiedene Klassen aufzuteilen.

Welches Problem löst das Entwurfsmuster Bridge?

Das Entwurfsmuster Bridge löst das Problem, dass eine Klassenhierarchie zwei unabhängige Erweiterungsdimensionen haben soll, eine für die Abstraktion und eine für die Implementierung. Das Hauptziel des Bridge Musters besteht darin, den Kunden die Möglichkeit zu geben, verschiedene Implementierungen mit unterschiedlichen Abstraktionen auszuwählen und zu kombinieren, ohne ihre Klassenhierarchie zu ändern. Auf diese Weise können wir mehr Flexibilität und Wiederverwendbarkeit im Code erreichen. Die Verwendung des Bridge Entwurfsmusters ermöglicht es uns also, die Abstraktion und ihre Implementierung unabhängig voneinander zu definieren und zu erweitern. Außerdem können wir so die Kopplung zwischen der Abstraktion und ihrer Implementierung zur Kompilierzeit vermeiden, so dass die Implementierung dann zur Laufzeit ausgewählt werden kann.

Beispiel einer Bridge Implementierung in Java

Jetzt werden wir zeigen, wie man das Entwurfsmuster Bridge in Java implementiert. In diesem Beispiel werden wir die Möglichkeit programmieren, in verschiedenen Arten von Geschäften (z.B. Online-Shop, Ladengeschäft) einzukaufen und dabei verschiedene Zahlungsmethoden (z.B. Kreditkarte, PayPal) zu verwenden. Zur Abstraktion verwenden wir die abstrakte Klasse Obchod und für verschiedene Zahlungsimplementierungen die Schnittstelle SposobPlatby. Wir trennen die Abstraktion(Abstraction) von ihrer Implementierung(Implementor), indem wir sie in separaten Klassenhierarchien unterbringen. Anschließend implementieren wir die Abstraktion, indem wir sie an das Implementor-Objekt delegieren. Abstraktion Obchod repräsentiert verschiedene Arten von Geschäften (z.B. Ladengeschäfte, Online-Shops). Obchod.java

package designpatterns;

// Abstrakcia - typ obchodu
abstract public class Obchod {
    protected SposobPlatby sposobPlatby;

    public Obchod(SposobPlatby sposobPlatby) {
        this.sposobPlatby = sposobPlatby;
    }

    public abstract void nakup(float suma);
}

Die spezifischeren Abstraktionen(KamennyObchod und InternetovyObchod) stellen verschiedene Arten von Geschäften dar, die Einkäufe tätigen können und SposobPlatby zur Zahlungsabwicklung verwenden. KamennyObchod.java

package designpatterns;

// Konkrétnejšia abstrakcia obchodu - kamenný obchod
public class KamennyObchod extends Obchod {
    public KamennyObchod(SposobPlatby sposobPlatby) {
        super(sposobPlatby);
    }

    public void nakup(float suma) {
        System.out.println("Nákup v kamennom obchode.");
        sposobPlatby.spracujPlatbu(suma);
    }
}

InternetovyObchod.java

package designpatterns;

// Konkrétnejšia abstrakcia obchodu - internetový obchod
public class InternetovyObchod extends Obchod {
    public InternetovyObchod(SposobPlatby sposobPlatby) {
        super(sposobPlatby);
    }

    public void nakup(float suma) {
        System.out.println("Nákup v internetovom obchode.");
        sposobPlatby.spracujPlatbu(suma);
    }
}

Der Implementierer Zahlungsmethode steht für verschiedene Zahlungsmethoden (z.B. Kreditkarte, PayPal). SposobPlatby.java

package designpatterns;

// Implementátor - rozhranie pre spôsob platby
public interface SposobPlatby {
    void spracujPlatbu(float suma);
}

Spezielle Implementierungen(PlatbaKreditnouKartou und PlatbaPayPal) bieten spezielle Implementierungen von Zahlungsmethoden. PlatbaKreditnouKartou.java

package designpatterns;

// Konkrétna implementácia – platba kreditnou kartou
public class PlatbaKreditnouKartou implements SposobPlatby {
    private String cisloKarty;

    public PlatbaKreditnouKartou(String cisloKarty) {
        this.cisloKarty = cisloKarty;
    }

    public void spracujPlatbu(float suma) {
        System.out.println("Spracováva sa platba kreditnou kartou vo výške " + suma + "€ s číslom karty " + cisloKarty  + ".");
    }
}

In der Klasse Main erstellen wir Instanzen von verschiedenen Arten von Geschäften mit unterschiedlichen Zahlungsmethoden und tätigen Einkäufe. Das Entwurfsmuster Bridge ermöglicht es uns, Zahlungsmethoden und Geschäftsarten zu ändern und zu kombinieren, ohne die Hierarchie der Deal-Klasse zu ändern. Main.java

import designpatterns.*;

public class Main {
    public static void main(String[] args) {
        SposobPlatby platbaKreditnouKartou = new PlatbaKreditnouKartou("1234-5678-9012-3456");
        SposobPlatby platbaPayPal = new PlatbaPayPal("mojpaypal@email.com");

        Obchod internetovyObchod = new InternetovyObchod(platbaKreditnouKartou);
        Obchod kamennyObchod = new KamennyObchod(platbaPayPal);

        internetovyObchod.nakup(100.0f);
        kamennyObchod.nakup(50.0f);
    }
}

Die Ausgabe dieses Beispiels ist:

Java Code Ausgabe aus dem Bridge Beispiel
Entwurfsmuster Bridge – Beispielausgabe

Zusammenfassung

Das Entwurfsmuster Bridge wird in einer Situation verwendet, in der wir die Abstraktion von der Implementierung trennen müssen, damit wir sie unabhängig voneinander ändern können. Wir haben die Dateien mit dem obigen Beispiel in Form von Code vorbereitet, den du direkt in Java ausführen kannst. Lade den Java Code Bridge hier herunter. Beherrschst du die Programmiersprache Java? Wenn du zum Beispiel einen Job suchst. als Java-Programmierer, siehe dir unsere Mitarbeiterbenefits an und reagiere auf die neuesten Stellenangebote.

Über den Autor

Jozef Wagner

Java Developer Senior

Viac ako 10 rokov programujem v Jave, momentálne pracujem v msg life Slovakia ako Java programátor senior a pomáham zákazníkom implementovať ich požiadavky do poistného softvéru Life Factory. Vo voľnom čase si rád oddýchnem v lese, prípadne si zahrám nejakú dobrú počítačovú hru.

Informieren Sie uns über sich