Adapter

Werbung
Konstantin Prokudin
10. Juni 2011
 Adapter-Muster
 Fassade-Muster
 Quellen
 Beispiel aus dem Leben
 Objektorientierte Adapter
 Beispiel: Zeicheneditor
 Klassen-Adapter
 Spezielle Adapter
 Adapter: Vor- und Nachteile
 Zusammenfassung
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Sie brauchen Strom?
Dann eine Steckdose suchen.
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Sie finden eine Steckdose...
… aber sie passt für Ihren Stecker nicht!
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
 Schnittstellenproblem: unserer Stecker soll eine
Steckdose verwenden. Der Stecker kann jedoch auf das
Ziel nicht zugreifen, da der Stecker eine andere
Schnittstelle erwartet als die, die von der Steckdose
angeboten wird.
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
 Der Stecker wird in einen Adapter gesteckt. Der
Adapter bietet die Schnittstelle an, die der Stecker
benötigt.
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Die Steckdose bietet
eine Schnittstelle für
den Bezug von Strom
Dieser Stecker
erwartet eine andere
Schnittstelle.
Der Adapter konvertiert
eine Schnittstelle in eine
andere.
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
 Das Adapter-Muster konvertiert die Schnittstelle
einer Klasse in die Schnittstelle, die der Client
erwartet. Adapter ermöglicht die Zusammenarbeit von
Klassen, die ohne nicht zusammenarbeiten könnten,
weil sie inkompatible Schnittstellen haben.
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Client
Ziel Klasse
• Ihre Schnittstelle passt nicht zur Ziel-Klasse
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Client
Adapter
Ziel Klasse
• Der Adapter implementiert die Schnittstelle,
die
Ihre Klassen erwarten
• Und spricht mit der Ziel - Schnittstelle, um Ihre
Anfrage zu erledigen
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Client
• Keine
Adapter
Ziel Klasse
Code-Änderung beim Client und Ziel-Klasse
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
 1. Der Client stellt eine Anfrage an den Adapter, indem er
unter Verwendung der Ziel-Schnittstelle eine Methode auf
ihm aufruft.
 2. Der Adapter übersetzt diese Anfrage in ein oder mehrere
Aufrufe auf das Adaptierte, für die er die AdaptiertenSchnittstelle verwendet.
 3. Der Client empfängt die Ergebnisse des Aufrufs und
erfährt nie, dass da ein Adapter ist, der eine Übersetzung
durchführt.
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
benutzt
adaptiert
adaptiert.spezifischeOperation()
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
begrenzungsRahmen();
zeichne();
TextAnzeige passt nicht
zu GraphischesObjekt
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Zulieferer-Klasse
public class TextAnzeige {
private int ursprung;
private int hoehe;
private int breite;
private String text;
public int getUrsprung(){
return ursprung;
}
public int getHoehe(){
return hoehe;
}
public int getBreite(){
return breite;
}
public String zeigMich(){
return text;
}
Adapter
public class TextAdapter {
private TextAnzeige text;
// Konstruktor
public ZeichenAdapter(TextAnzeige text)
{this.text = text;}
// Rahmen
public Rahmen begrenzungsrahmen(){
text.getHoehe();
text.getBreite();
...
}
// Text
public Zeichen zeichne(){
...
text.zeigMich();
...
}
}
}
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Aufruf des Adapters
public class TestAdapter {
public static void main(String[] args) {
TextAdapter text = new TextAdapter(new TextAnzeige());
text.begrenzungsrahmen();
text.zeichne();
}
}
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Klassen-Adapter
benutzt mehrfache Vererbung
um unser Objekt anzupassen
bildet der Adapter eine Unterklasse
des Adaptierten und des Ziels
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
 Der einzige Unterschied zwischen den beiden
Adaptern ist, dass bei einem Klassen-Adapter eine
Unterklasse des Ziels und der Adaptierten Klasse
gebildet wird, während beim Objekt-Adapter
Komposition verwendet wird, um die Anfragen an das
Adaptierte zu übergeben.
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
 Es gibt zwei besondere Vorgehensweisen, wenn man
das Adaptermuster verwenden möchte. Zum einen
kann man eine Klasse gleich mit einem steckbaren
Adapter ausstatten. Zum anderen kann man eine
Klasse auch für mehrere Klienten gleichzeitig, mit
einem n-Weg-Adapter, zugänglich machen.
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
 Wenn man eine Klasse möglichst allgemein wieder
verwendbar schreiben möchte, kann man sie mit
einem steckbaren Adapter ausstatten. Hierzu gibt man
dieser Klasse abstrakte Methoden, die ein Adapter
später implementieren muss.
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
 Eine Adapterklasse kann mehrere Interfaces
implementieren, um so für zwei oder mehr Klienten
nutzbar zu sein. Dies nennt man einen n-/zwei-WegAdapter. Der n-Weg-Adapter ist sowohl in Java als
auch in C zu verwirklichen. Jeder „normale“ ein-WegAdapter ist im Prinzip ein Spezialfall des n-WegAdapters.
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
 keine Codeänderung
 Wiederverwendbarkeit von Softwareprojekten
 geringere Kosten
 kürzere Entwicklungszeiten
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
 zusätzliche Delegationsschicht
 Einfluss auf die Performance
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
 Eine Klasse soll eine andere Klasse verwenden, die aber
keinen passenden Schnittstellen hat oder die
Quellcode von der Klasse nicht bekannt ist.
 Als Lösung wird eine Klasse Adapter implementiert,
die die nötigen Schnittstelle liefert.
Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor
Klassen-Adapter Spezielle Adapter Vor- und Nachteile Zusammenfassung
 Problem
 Lösung
 Fassade
 Fassade: Beispiel Heimkino
 Fassade: noch ein Beispiel
 Fassade: Vor- und Nachteile
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
Um in einem System eine möglichst hohe Kohäsion zu erreichen, muss
in der Regel für jede Funktionalität auch eine eigene Klasse
bereitgestellt werden. Das führt im Laufe der Entwicklung eines
Software-Projekts zu immer zahlreicheren Klassen und immer mehr
Abhängigkeiten zwischen ihnen.
Um die Komplexität des Gesamtsystems zu verringern, kann es in
Subsysteme unterteilt werden. Es bestehen aber weiterhin die
Probleme, dass ein Klient für die Nutzung der gewünschten
Funktionen innerhalb eines Subsystems auf viele Subsystemobjekte
zugreifen muss. Das bedeutet Unübersichtlichkeit und hohe Kopplung.
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
Clients
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
Den oben beschriebenen Problemen kann man
durch die Anwendung des Fassade Pattern
entgegenwirken.
Die Fassade steht dabei zwischen den Clients, die
Funktionen eines Subsystem nutzen wollen, und
dem Subsystem selbst.
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
Clients
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
Das Subsystem kann aus Klassen, Funktionen,
Datenstrukturen oder weiteren Subsystemen
bestehen. Die Komponenten des Subsystems
implementieren die Funktionalität. Sie wissen nichts
von einer möglichen Fassade.
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
Clients wollen die Subsystemfunktionalität nutzen.
Vor Einführung der Fassade müssen sie dazu auf die
einzelnen Komponenten des Subsystems zugreifen,
nach Einführung der Fassade laufen alle Anfragen nur
noch über sie.
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
Die Fassade stellt eine abstrakte Schnittstelle für den
Zugriff auf die Subsystemfunktionen zur Verfügung.
Sie steht zwischen den Klienten und den
Subsystemkomponenten und leitet die Anfragen der
Klienten weiter. Dazu muss die Fassade alle
Subsystemkomponenten und deren Schnittstellen
kennen. Möglicherweise muss sie selbst Funktionalität
implementieren, um ihre Schnittstelle auf die der
Klienten abzubilden. Die Fassade sollte den Zugriff auf
die Funktionen des Subsystems möglichst weit
vereinfachen.
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
 Sie haben ein System mit einem DVD-Player, einem
Beamer, einer automatischen Leinwand, SurroundSound und einer Popcorn-Maschine
zusammengestellt.
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
 Das sind viele Klassen, viele Interaktionen und eine
große Menge an Schnittstellen, die gelernt und
verwendet werden müssen.
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile













Die Popcorn-Maschine einschalten
Die Popcorn-Maschine starten
Die Beleuchtung dimmen
Die Leinwand herunterfahren
Den Beamer einschalten
Den Beamer –Eingang auf DVD schalten
Den Beamer in den Breitwandmodus versetzen
Den Verstärket einschalten
Den Verstärkereingang auf DVD setzen
Den Verstärker auf Surround-Sound setzen
Die Verstärkerlautstärke auf Mittel setzen
Den DVD-Spieler einschalten
Den DVD-Spieler starten
um ein Film
anzuschauen
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
public class HeimkinoFassade {
Verstärker verstärker;
Tuner tuner;
DVDSpieler dvd;
CDSpieler cd;
Beamer beamer;
Beleuchtung beleuchtung;
Leinwand leinwand;
PopcornMaschine popcorn;
// Konstruktor
public HeimkinoFassade(Verstärker amp,
Tuner tuner,
DVDSpieler dvd,
CDSpieler cd,
Beamer beamer,
Leinwand leinwand,
Beleuchtung beleuchtung,
PopcornMaschine popcorn){
this.verstärker = amp;
this.tuner = tuner;
this.dvd = dvd;
this.cd = cd;
this.beamer = beamer;
this.beleuchtung = beleuchtung;
this.leinwand = leinwand;
this.popcorn = popcorn;
}
}
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
public void filmSchauen(String film){
System.out.println("Film fängt an");
popcorn.ein();
popcorn.starten();
beleuchtung.dimmen(10);
leinwand.runter();
beamer.ein();
beamer.breitwandModus();
verstärker.ein();
verstärker.setDVD();
verstärker.setSurroundSound();
verstärker.setLautstärke(5);
dvd.ein();
dvd.spielen();
}
public void filmBeenden(){
System.out.println(“Film zum Ende");
popcorn.aus();
beleuchtung.ein();
leinwand.hoch();
beamer.aus();
verstärker.aus();
dvd.anhalten();
dvd.auswerfen();
dvd.aus();
}
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
public class HeimkinoTest {
public static void main(String[] args){
HeimkinoFassade heimkino = new HeimkinoFassade(verstärker,
tuner, dvd, cd, beamer, leinwand, beleuchtung, popcorn);
heimkino.filmSchauen("Lost in translation");
heimkino.filmBeenden();
}
}
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
 Die Fassade kann den Klienten für ein komplexes Subsystem
eine einheitliche Schnittstelle bieten und so die Verwendung des
Subsystems weniger aufwendig und fehleranfällig machen
 Die Fassade entkoppelt die Klienten vom Subsystem. Es werden
die Abhängigkeiten zwischen beiden reduziert, was zu besserer
Wiederverwendbarkeit und Portabilität führt
 Die Fassade kann verwendet werden, um ein System in
Schichten aufzuteilen. Sie definiert dabei den Eintrittspunkt zu
jeder Subsystemschicht
 Für große Software-Projekte ist es wichtig, den
Übersetzungsaufwand zu reduzieren. Durch Fassaden kann
verhindert werden, dass eine kleine Änderung eine neue
Übersetzung des gesamten Systems erfordert.
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
 Die Verwendung einer Fassade bedeutet immer eine
zusätzliche Indirektionsstufe. Falls ihre Anwendung
nicht wirklich erforderlich ist, da zum Beispiel das
Subsystem sehr einfach und gut zu benutzen ist, stellt
sie nur einen zusätzlichen Ballast dar. Insbesondere an
zeitkritischen Stellen sollte auf ihren Einsatz
verzichtet werden
 Die Fassade soll vereinfachen. Das hat aber zur
Konsequenz, dass meist nur bestimmte Funktionen
des Subsystems bereitgestellt werden. Die Fassade
kann also möglicherweise die Funktionalität /
Flexibilität des Subsystems einschränken.
Fassade: Inhalt Problem Lösung Fassade Beispiel Heimkino Noch ein Beispiel Vor- und Nachteile
 Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates
Entwurfsmuster von Kopf bis Fuß
O'Reilly, Cambridge, 2004
 Dr. Günter Kniesel, Institut für Informatik III, Universität Bonn
http://roots.iai.uni-bonn.de/teaching/vorlesungen/2007aswt/downloads/folien/06design-patterns-d-20070510.pdf
 Katrin Solveig Lohan & Matthias Hillebrand
http://www.techfak.unibielefeld.de/~dstoesse/SeminarDesignPatterns/Adapter_Handout.pdf
Quellen
Herunterladen