{"id":3989,"date":"2023-10-27T10:00:05","date_gmt":"2023-10-27T10:00:05","guid":{"rendered":"https:\/\/msgprogramator.sk\/?p=3989"},"modified":"2025-10-22T11:07:14","modified_gmt":"2025-10-22T11:07:14","slug":"java-bridge","status":"publish","type":"post","link":"https:\/\/msgprogramator.sk\/de\/java-bridge\/","title":{"rendered":"Java-Entwurfsmuster (design pattern): Bridge"},"content":{"rendered":"<p>Heute werfen wir einen Blick auf das n\u00e4chste <strong>Entwurfsmuster <\/strong> (Java <strong>design patterns<\/strong>) aus der Kategorie der strukturellen Muster (<strong>structural patterns<\/strong>) &#8211; Bridge. Entwurfsmuster in dieser Kategorie befassen sich mit Klassenstrukturen wie Vererbung (<strong>inheritance<\/strong>) und Komposition (<strong>composition<\/strong>).<\/p>\n<p>Lies mehr \u00fcber weitere Design Patterns \u2013 eine Serie von Entwurfsmustern:<\/p>\n<ul>\n<li><a href=\"https:\/\/msgprogramator.sk\/de\/java-singleton\/\">Entwurfsmuster Singleton<\/a><\/li>\n<li><a href=\"https:\/\/msgprogramator.sk\/de\/java-builder\/\">Entwurfsmuster Builder<\/a><\/li>\n<li><a href=\"https:\/\/msgprogramator.sk\/de\/java-prototype\/\">Entwurfsmuster Prototyp<\/a><\/li>\n<li><a href=\"https:\/\/msgprogramator.sk\/de\/java-factory\/\">Entwurfsmuster Factory<\/a><\/li>\n<li><a href=\"https:\/\/msgprogramator.sk\/de\/java-abstract-factory\/\">Entwurfsmuster Abstract factory<\/a><\/li>\n<li><a href=\"https:\/\/msgprogramator.sk\/de\/java-composite\/\">Entwurfsmuster Composite<\/a><\/li>\n<\/ul>\n<p>Das Entwurfsmuster <strong>Bridge<\/strong> (Br\u00fccke) ist ein Entwurfsmuster, das in der Softwareentwicklung verwendet wird, um die Abstraktion von der Implementierung zu trennen, so dass sich die beiden Teile unabh\u00e4ngig voneinander \u00e4ndern k\u00f6nnen. Dabei verwendet das Bridge Muster Kapselung, Aggregation und kann die Vererbung nutzen, um Verantwortlichkeiten in verschiedene Klassen aufzuteilen.<\/p>\n<h2>Welches Problem l\u00f6st das Entwurfsmuster Bridge?<\/h2>\n<p>Das Bridge Muster l\u00f6st das Problem, dass eine Klassenhierarchie zwei unabh\u00e4ngige Erweiterungsdimensionen haben soll, eine f\u00fcr die Abstraktion und eine f\u00fcr die Implementierung.<\/p>\n<p>Das Hauptziel des Bridge Musters besteht darin, den Kunden die M\u00f6glichkeit zu geben, verschiedene Implementierungen mit unterschiedlichen Abstraktionen auszuw\u00e4hlen und zu kombinieren, ohne ihre Klassenhierarchie zu \u00e4ndern. Auf diese Weise k\u00f6nnen wir mehr Flexibilit\u00e4t und Wiederverwendbarkeit im Code erreichen.<\/p>\n<p>Die Verwendung des Bridge Entwurfsmusters erm\u00f6glicht es uns also, die Abstraktion und ihre Implementierung unabh\u00e4ngig voneinander zu definieren und zu erweitern. Au\u00dferdem k\u00f6nnen wir so die Kopplung zwischen der Abstraktion und ihrer Implementierung zur Kompilierzeit vermeiden, so dass die Implementierung dann zur Laufzeit ausgew\u00e4hlt werden kann.<\/p>\n<h2>Beispiel einer Bridge Implementierung in Java<\/h2>\n<p>Jetzt werden wir zeigen, wie das Entwurfsmuster Bridge in Java implementiert wird. In diesem Beispiel werden wir die M\u00f6glichkeit programmieren, in verschiedenen Arten von Gesch\u00e4ften (z.B. Online-Shop, Ladengesch\u00e4ft) einzukaufen und dabei verschiedene Zahlungsmethoden (z.B. Kreditkarte, PayPal) zu verwenden. Zur Abstraktion verwenden wir die abstrakte Klasse <em>Obchod <\/em>und f\u00fcr verschiedene Zahlungsimplementierungen die Schnittstelle <em>SposobPlatby<\/em>.<\/p>\n<p>Wir trennen die Abstraktion<em>(Abstraction<\/em>) von ihrer Implementierung<em>(Implementor<\/em>), indem wir sie in separaten Klassenhierarchien unterbringen. Anschlie\u00dfend implementieren wir die <em>Abstraktion<\/em>, indem wir sie an das <em>Implementor-Objekt<\/em> delegieren.<\/p>\n<p>Abstraktion <em>Obchod<\/em> repr\u00e4sentiert verschiedene Arten von Gesch\u00e4ften (z.B. Ladengesch\u00e4fte, Online-Shops).<\/p>\n<p><strong><u>Obchod.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Abstrakcia - typ obchodu\nabstract public class Obchod {\n    protected SposobPlatby sposobPlatby;\n\n    public Obchod(SposobPlatby sposobPlatby) {\n        this.sposobPlatby = sposobPlatby;\n    }\n\n    public abstract void nakup(float suma);\n}\n<\/code><\/pre>\n<p>Die spezifischeren Abstraktionen<em>(KamennyObchod <\/em>und<em> InternetovyObchod<\/em>) stellen verschiedene Arten von Gesch\u00e4ften dar, die Eink\u00e4ufe t\u00e4tigen k\u00f6nnen und <em>SposobPlatby<\/em> zur Zahlungsabwicklung verwenden.<\/p>\n<p><strong><u>KamennyObchod.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Konkr\u00e9tnej\u0161ia abstrakcia obchodu - kamenn\u00fd obchod\npublic class KamennyObchod extends Obchod {\n    public KamennyObchod(SposobPlatby sposobPlatby) {\n        super(sposobPlatby);\n    }\n\n    public void nakup(float suma) {\n        System.out.println(&quot;N\u00e1kup v kamennom obchode.&quot;);\n        sposobPlatby.spracujPlatbu(suma);\n    }\n}\n<\/code><\/pre>\n<p><strong><u>InternetovyObchod.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Konkr\u00e9tnej\u0161ia abstrakcia obchodu - internetov\u00fd obchod\npublic class InternetovyObchod extends Obchod {\n    public InternetovyObchod(SposobPlatby sposobPlatby) {\n        super(sposobPlatby);\n    }\n\n    public void nakup(float suma) {\n        System.out.println(&quot;N\u00e1kup v internetovom obchode.&quot;);\n        sposobPlatby.spracujPlatbu(suma);\n    }\n}\n<\/code><\/pre>\n<p>Der Implementierer <em>SposobPlatby<\/em> steht f\u00fcr verschiedene Zahlungsmethoden (z.B. Kreditkarte, PayPal).<\/p>\n<p><strong><u>SposobPlatby.java<br \/>\n<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Implement\u00e1tor - rozhranie pre sp\u00f4sob platby\npublic interface SposobPlatby {\n    void spracujPlatbu(float suma);\n}\n<\/code><\/pre>\n<p>Spezielle Implementierungen(<em>PlatbaKreditnouKartou<\/em> <br \/>und <em>PlatbaPayPal<\/em>) bieten spezielle Implementierungen von Zahlungsmethoden.<\/p>\n<p><strong><u>PlatbaKreditnouKartou.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Konkr\u00e9tna implement\u00e1cia \u2013 platba kreditnou kartou\npublic class PlatbaKreditnouKartou implements SposobPlatby {\n    private String cisloKarty;\n\n    public PlatbaKreditnouKartou(String cisloKarty) {\n        this.cisloKarty = cisloKarty;\n    }\n\n    public void spracujPlatbu(float suma) {\n        System.out.println(&quot;Spracov\u00e1va sa platba kreditnou kartou vo v\u00fd\u0161ke &quot; + suma + &quot;\u20ac s \u010d\u00edslom karty &quot; + cisloKarty  + &quot;.&quot;);\n    }\n}\n<\/code><\/pre>\n<p>In der Klasse <em>Main<\/em> erstellen wir Instanzen von verschiedenen Arten von Gesch\u00e4ften mit unterschiedlichen Zahlungsmethoden und t\u00e4tigen Eink\u00e4ufe. Das Entwurfsmuster <strong>Bridge<\/strong> erm\u00f6glicht es uns, Zahlungsmethoden und Gesch\u00e4ftsarten zu \u00e4ndern und zu kombinieren, ohne die Hierarchie der Klasse Deal zu \u00e4ndern.<\/p>\n<p><strong><u>Main.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">import designpatterns.*;\n\npublic class Main {\n    public static void main(String[] args) {\n        SposobPlatby platbaKreditnouKartou = new PlatbaKreditnouKartou(&quot;1234-5678-9012-3456&quot;);\n        SposobPlatby platbaPayPal = new PlatbaPayPal(&quot;mojpaypal@email.com&quot;);\n\n        Obchod internetovyObchod = new InternetovyObchod(platbaKreditnouKartou);\n        Obchod kamennyObchod = new KamennyObchod(platbaPayPal);\n\n        internetovyObchod.nakup(100.0f);\n        kamennyObchod.nakup(50.0f);\n    }\n}\n<\/code><\/pre>\n<p>Die Ausgabe dieses Beispiels ist:<\/p>\n<figure id=\"attachment_3993\" aria-describedby=\"caption-attachment-3993\" style=\"width: 624px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1546\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/10\/Bridge-navrhovy-vzor.webp\" alt=\"Java Code Ausgabe aus dem Bridge Beispiel\" width=\"624\" height=\"151\" srcset=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/10\/Bridge-navrhovy-vzor.webp 624w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/10\/Bridge-navrhovy-vzor-300x73.webp 300w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><figcaption id=\"caption-attachment-3993\" class=\"wp-caption-text\">Entwurfsmuster Bridge &#8211; Beispielausgabe<\/figcaption><\/figure>\n<h2>Zusammenfassung<\/h2>\n<p>Das Entwurfsmuster Bridge wird in einer Situation verwendet, in der wir die Abstraktion von der Implementierung trennen m\u00fcssen, damit wir sie unabh\u00e4ngig voneinander \u00e4ndern k\u00f6nnen.<\/p>\n<p>Wir haben die Dateien mit dem obigen Beispiel in Form von Code vorbereitet, den du direkt in Java ausf\u00fchren kannst. Lade den <a href=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/10\/Bridge.zip\">Java Code Bridge hier<\/a> herunter.<\/p>\n<p>Beherrschst du die <a href=\"https:\/\/msgprogramator.sk\/java\/\">Programmiersprache Java<\/a>? Wenn du zum Beispiel einen Job suchst. als <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/java-entwickler-senior\/\">Java-Programmierer<\/a>, siehe dir unsere <a href=\"https:\/\/msg-life.sk\/de\/mitarbeiter-benefits\/\">Mitarbeiterbenefits <\/a>an und reagiere auf die <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/\">neuesten Stellenangebote<\/a>. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was ist das Entwurfsmuster Bridge und wof\u00fcr wird es verwendet? Lies unseren neuen Artikel und lade den Beispielcode herunter.<\/p>\n","protected":false},"author":14,"featured_media":3990,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[62],"tags":[],"class_list":["post-3989","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3989","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/comments?post=3989"}],"version-history":[{"count":5,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3989\/revisions"}],"predecessor-version":[{"id":9334,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3989\/revisions\/9334"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media\/3990"}],"wp:attachment":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media?parent=3989"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/categories?post=3989"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/tags?post=3989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}