Commit 65ad828e authored by Blanke, Daniela's avatar Blanke, Daniela
Browse files

Update design-patterns-adapter.html

parent 2cd6c6ae
Pipeline #8015 failed with stage
in 39 seconds
......@@ -5,7 +5,7 @@
<p>In der Software-Entwicklung wird ein Adapter (engl. auch <i>Wrapper</i>) eingesetzt, wenn eine existierende Klasse verwendet werden soll, deren Interface nicht dem vorgesehenen Interface entspricht. Die existierende Klasse soll oder kann nicht verändert werden, insbesondere wenn sie Teil einer externen Bibliothek ist, die von Dritten entwickelt wird. Die zu adaptierende Klasse aus der Bibliothek ist häufig von Interesse, da sie komplexes Verhalten implementiert, das wiederverwendet werden soll. Das Prinzip der Wiederverwendung ist grundsätzlich effizient, wenn externe Bibliotheken in ein Projekt eingebunden werden, von denen bekannt ist, dass sie umfänglich getestet worden sind und dass sie sich in anderen Projekten bereits praktisch bewährt haben. Im Java-Umfeld werden Bibliotheken i.d.R. aus einem <a href="https://mvnrepository.com/">zentralen Repository</a> über Build-Management-Werkzeuge wie <a href="https://maven.apache.org/">Maven</a> oder <a href="https://gradle.org/">Gradle</a> automatisiert in ein Projekt eingebunden.</p>
<p>Das Adapter-Muster gibt es in zwei Varianten: Objektadapter und Klassenadapter. In beiden Varianten wird die Ziel-Schnittstelle <code>Target</code> von der Adapter-Klasse <code>Adapter</code> implementiert. Weiterhin ruft der Adapter in der von <code>Target</code> vorgeschriebenen Methode <code>operation</code> die Methode <code>service</code> der adaptierten Klasse <code>Adaptee</code> auf. Es können natürlich auch mehrere Methoden adaptiert werden. Beim Objektadapter besteht eine Assoziation zwischen Adapter und adaptierter Klasse, während beim Klassenadapter der Adapter die adaptierte Klasse erweitert. Der Klassenadapter ist in Java nicht zu realisieren, falls <code>Target</code> kein Interface sondern eine zustandsbehaftete Klasse ist, da in diesem Fall Mehrfachvererbung erforderlich wäre. Die folgenden UML-Klassendiagramme visualisieren Objekt- und Klassenadapter im Vergleich zueinander.</p>
<p>Das Adapter-Muster gibt es in zwei Varianten: Objektadapter und Klassenadapter. In beiden Varianten wird die Ziel-Schnittstelle <code>Target</code> von der Adapter-Klasse <code>Adapter</code> implementiert. Weiterhin ruft der Adapter in der von <code>Target</code> vorgeschriebenen Methode <code>operation</code> die Methode <code>service</code> der adaptierten Klasse <code>Adaptee</code> auf. Es können natürlich auch mehrere Methoden adaptiert werden. Beim Objektadapter besteht eine Assoziation zwischen Adapter und adaptierter Klasse, während beim Klassenadapter der Adapter die adaptierte Klasse erweitert. Der Klassenadapter ist in Java nicht zu realisieren, falls <code>Target</code> kein Interface, sondern eine zustandsbehaftete Klasse ist, da in diesem Fall Mehrfachvererbung erforderlich wäre. Die folgenden UML-Klassendiagramme visualisieren Objekt- und Klassenadapter im Vergleich zueinander.</p>
<img src="media/patterns_adapter.png" style="width:1000px">
<label>Entwurfsmuster Adapter (in Varianten Objekt- und Klassenadapter)</label>
......@@ -87,7 +87,7 @@
<img src="media/patterns_adapter_shapes.png" style="width:500px">
<label>Polygone zur Motivation eines Adapters</label>
<p>Die Bestimmung der Fläche eines Polygons ist nicht trivial. Aus diesem Grund möchten wir die Bibliothek <a href="http://commons.apache.org/proper/commons-math/">Apache Commons Math</a> einbinden, die eine API für sehr viele mathematische Grundlagen bereitstellt. Wir interessieren uns für die Methode <code>getSize</code> der Klasse <a href="http://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math4/geometry/euclidean/twod/PolygonsSet.html"><code>PolygonsSet</code></a>, über die Fläche für ein Polygon berechnet werden kann. Das Code-Beispiel zeigt, wie das Polygon über einen Objektadapter (<code>PolygonObjectAdapter</code>) oder alternativ über einen Klassenadapter (<code>PolygonClassAdapter</code>) realisiert werden kann. In der Klasse <code>Client</code> ist zu erkennen, dass auch die neuen Adapter-Klassen das Interface <code>Shape</code> erfüllen.</p>
<p>Die Bestimmung der Fläche eines Polygons ist nicht trivial. Aus diesem Grund möchten wir die Bibliothek <a href="http://commons.apache.org/proper/commons-math/">Apache Commons Math</a> einbinden, die eine API für sehr viele mathematische Grundlagen bereitstellt. Wir interessieren uns für die Methode <code>getSize</code> der Klasse <a href="http://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math4/geometry/euclidean/twod/PolygonsSet.html"><code>PolygonsSet</code></a>, über die die Fläche für ein Polygon berechnet werden kann. Das Code-Beispiel zeigt, wie das Polygon über einen Objektadapter (<code>PolygonObjectAdapter</code>) oder alternativ über einen Klassenadapter (<code>PolygonClassAdapter</code>) realisiert werden kann. In der Klasse <code>Client</code> ist zu erkennen, dass auch die neuen Adapter-Klassen das Interface <code>Shape</code> erfüllen.</p>
<ul class="nav nav-tabs" id="adapter-tabs2" role="tablist">
<li class="nav-item"><a href="#adapter-tabs-polygon1" class="nav-link active" data-toggle="tab" role="tab">PolygonObjectAdapter</a></li>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment