{"id":3921,"date":"2023-09-15T10:20:18","date_gmt":"2023-09-15T10:20:18","guid":{"rendered":"https:\/\/msgprogramator.sk\/?p=3921"},"modified":"2025-07-07T11:36:26","modified_gmt":"2025-07-07T11:36:26","slug":"java-adapter","status":"publish","type":"post","link":"https:\/\/msgprogramator.sk\/de\/java-adapter\/","title":{"rendered":"Java-Entwurfsmuster (design patterns): Adapter"},"content":{"rendered":"<p>Heute werfen wir einen Blick auf das erste <strong>Entwurfsmuster <\/strong> (Java <strong>design patterns<\/strong>) aus der Kategorie der strukturellen Muster (<strong>Structural Patterns<\/strong>): Adapter Entwurfsmuster in dieser Kategorie befassen sich mit Klassenstrukturen wie Vererbung (<strong>inheritance<\/strong>) und Komposition (<strong>composition<\/strong>). 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<\/ul>\n<h2>Was ist das Adapter Design Pattern?<\/h2>\n<p> Adapter ist ein Entwurfsmuster, das die Kommunikation zwischen zwei bestehenden Klassen oder Schnittstellen erm\u00f6glicht, die aufgrund der Inkompatibilit\u00e4t ihrer Schnittstellen nicht miteinander kommunizieren k\u00f6nnen. Adapter erm\u00f6glicht die Zusammenarbeit dieser inkompatiblen Teile, indem er eine vermittelte Schnittstelle bereitstellt. <\/p>\n<h2>Welches Problem l\u00f6st das Entwurfsmuster Adapter?<\/h2>\n<p> Adapter l\u00f6st also das Problem der Kommunikation zwischen inkompatiblen Teilen von Komponenten, indem er eine Zwischenschicht zwischen ihnen schafft und Aufrufe zwischen Schnittstellen weiterleitet. Adapter ist n\u00fctzlich, wenn wir bestehenden Code oder Klassen mit neuem Code integrieren m\u00fcssen, der ein anderes Schnittstellenformat erwartet. Anstelle den Code der bestehenden Klassen zu \u00e4ndern, k\u00f6nnen wir einen Adapter erstellen, der die Kommunikation vermittelt. Mit diesem Designmuster kann man auch in Java arbeiten, insbesondere mit sogenannten <strong>Wrapper<\/strong>-Klassen oder -Objekten. Wrapper-Klassen erstellen Objekttypen aus primitiven Datentypen, indem sie diese in einen Adapter einwickeln, der dann die gew\u00fcnschten Eigenschaften des Objekttyps implementiert. Das hat zur Folge, dass wir mit einer Instanz der Klasse <strong><em>Integer<\/em><\/strong> arbeiten k\u00f6nnen, als ob wir mit einer normalen Variable vom Typ <strong><em>int<\/em><\/strong> arbeiten w\u00fcrden. <\/p>\n<h2>Beispiel f\u00fcr die Implementierung des Adapter-Musters in Java<\/h2>\n<p> Jetzt zeigen wir, wie das Adapter-Muster in Java implementiert werden kann. Wir verwenden die Schnittstelle Tvar, um die Fl\u00e4che einer beliebigen Form zu berechnen. <strong><u>Tvar.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\npublic interface Tvar {\n    public int vypocitajObsah(int x);\n}\n<\/code><\/pre>\n<p> Diese Schnittstelle wird auch von der Implementierung der Klasse Stvorec verwendet. <strong><u>Stvorec.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Aktu\u00e1lna implement\u00e1cia rozhrania Tvar\npublic class Stvorec implements Tvar {\n    @Override\n    public int vypocitajObsah(int x) {\n        return x * x;\n    }\n}\n<\/code><\/pre>\n<p> Wir w\u00fcrden auch gerne eine externe Implementierung f\u00fcr die Berechnung des Inhalts des Kreises verwenden, die von einem Drittanbieter bereitgestellt wird. Diese implementiert jedoch nicht unsere Schnittstelle Shape, die wir nicht \u00e4ndern k\u00f6nnen, da sie bereits verwendet wird. <strong><u>Kruh.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Implement\u00e1cia triedy Kruh dodan\u00e1 externe cez kni\u017enicu\npublic class Kruh {\n    public double vypocitajObsahKruhu(int r) {\n        return 3.14 * r * r;\n    }\n}<\/code><\/pre>\n<p> Die L\u00f6sung besteht darin, die Implementierung von Kruh an unser Interface Tvar anzupassen. Wir brauchen also einen Adapter, da die Methoden nicht kompatibel sind. <strong><u>KruhAdapter.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\npublic class KruhAdapter extends Kruh implements Tvar {\n    @Override\n    public int vypocitajObsah(int x) {\n        return (int) vypocitajObsahKruhu(x);\n    }\n}\n<\/code><\/pre>\n<p><strong><u>Main.java:<\/u><\/strong> Jetzt k\u00f6nnen wir sowohl die Formen Stvorec als auch Kruh (\u00fcber den Adapter KruhAdapter) verwenden und die Methode zur Berechnung der Fl\u00e4che auf beiden aufrufen. <\/p>\n<pre><code class=\"language-java\" data-line=\"\">import designpatterns.KruhAdapter;\nimport designpatterns.Stvorec;\nimport designpatterns.Tvar;\n\n\/\/ Pou\u017eitie vzoru adapter\npublic class Main {\n    public static void main(String[] args) {\n        Tvar kruh =  new KruhAdapter();\n        System.out.println(&quot;Obsah kruhu: &quot; + kruh.vypocitajObsah(4));\n        Tvar stvorec = new Stvorec();\n        System.out.println(&quot;Obsah \u0161tvorca: &quot; + stvorec.vypocitajObsah(4));\n    }\n}<\/code><\/pre>\n<p> Die Ausgabe dieses Beispiels ist: <img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1353 size-full\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/09\/adapter-design-pattern-vystup.webp\" alt=\"Nach der Verwendung der Formen Stvorec und Kruh mithilfe des Adapters KruhAdapter nutzen wir die Methode zur Berechnung der Fl\u00e4che.\" width=\"355\" height=\"151\" srcset=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/09\/adapter-design-pattern-vystup.webp 355w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/09\/adapter-design-pattern-vystup-300x128.webp 300w\" sizes=\"auto, (max-width: 355px) 100vw, 355px\" \/><\/p>\n<h2>Zusammenfassung<\/h2>\n<p> Das Entwurfsmuster Adapter wird in einer Situation verwendet, in der eine Klasse eine andere Schnittstelle haben muss als die, die sie derzeit hat. Der Adapter erm\u00f6glicht die Zusammenarbeit von Klassen, die sonst aufgrund unterschiedlicher Schnittstellen nicht zusammenarbeiten k\u00f6nnten. Der Adapter kann je nach verwendeter Implementierung in Klassenadapter und Objektadapter klassifiziert werden. 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\/09\/Adapter.zip\"> Code Java Adapter hier<\/a> herunter.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was ist das Adapter Design Pattern und wof\u00fcr wird es verwendet? Lies unseren neuen Artikel und lade den Beispielcode herunter. <\/p>\n","protected":false},"author":14,"featured_media":3923,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[62],"tags":[],"class_list":["post-3921","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\/3921","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=3921"}],"version-history":[{"count":4,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3921\/revisions"}],"predecessor-version":[{"id":4407,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3921\/revisions\/4407"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media\/3923"}],"wp:attachment":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media?parent=3921"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/categories?post=3921"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/tags?post=3921"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}