Konstantin Prokudin 10. Juni 2011

Ähnliche Dokumente
Fassade. Objektbasiertes Strukturmuster. C. Restorff & M. Rohlfing

Decorator Pattern. Analyse- und Design-Pattern CAS SWE FS14. Roland Müller Samuel Schärer

Creational Patterns. Seminar Software-Entwurf. Thomas Liro WS 2004/05.

Programmierung Nachklausurtutorium

Entwurfsmuster (Design Patterns)

Entwurfsmuster in Java

Überblick FBC SNW Zusammenfassung. Entwurfsmuster. Eine Einführung. Botond Draskoczy. Marcus Vitruvius Pollio

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Lukas Klich. Projektgruppe SHUTTLE. Seminar: Entwurfsmuster Lukas Klich/Projektgruppe SHUTTLE Seite: 1. Entwurfsmuster

Erzeugungsmuster. Kapselung der Objekt-Erzeugung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Programmieren 2 Java Überblick

Implementieren von Klassen

Model-View-Controller

Design Patterns. (Software-Architektur) Prof. Dr. Oliver Braun. Letzte Änderung: :12. Design Patterns 1/26

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

Prinzipien der objektorientierten Programmierung (OOP)

Fakultät IV Elektrotechnik/Informatik

Design Pattern. Motivation, Beispiel Definition "Das" Buch der Gang of Four Ausführliches Beispiel: Facade Beispiele. Aufgabe

Vererbung, Polymorphie

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

12 Abstrakte Klassen, finale Klassen und Interfaces

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

7. Klassenmethoden Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Abschnitt 10: Typisierte Klassen

7. Objektorientierung. Informatik II für Verkehrsingenieure

Erste Java-Programme (Scopes und Rekursion)

JUnit a Cook s Tour. Framework in Java Automatisierter Ablauf von Testfällen Testläufe kombinieren. Unterlagen als PDF auf der Übungsseite!

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

1 Modellierung einer Uhr

Einführung in die Systemprogrammierung

Programmieren in Java

Präsentation Interfaces

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Klassen und ihre Beziehungen III: Mehrfache Vererbung, Rollen, Schnittstellen und Pakete

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Java für Bauingenieure

Informatik I Eprog HS12

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Javakurs für Anfänger

Info B VL 11: Innere Klassen/Collections

Vererbung Was versteht man unter dem Begriff Vererbung?

Wahlpflichtfach Design Pattern

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Objektorientierte Programmierung (OOP)

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Software-Entwurfsmuster

Dr. Monika Meiler. Inhalt

Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse

Vererbung. Was versteht man unter dem Begriff Vererbung?

Interfaces. Definition von Interfaces Verwendung von Interfaces Vordefinierte Interfaces Beispiele. Dr. Beatrice Amrhein

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

Einstieg in die Informatik mit Java

4. Objektorientierte Programmierung mit C++

Verhaltensmuster. Entwurfsmuster - Design Patterns. HAW Hamburg Fakultät Technik und Informatik Department Informations- und Elektrotechnik

Grafische Benutzeroberflächen

14 Abstrakte Klassen, finale Klassen, Interfaces

Algorithmen und Datenstrukturen 07

Abstrakte Basisklassen

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

14 Abstrakte Klassen, finale Klassen, Interfaces

Programmieren in Java

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

II.4.1 Unterklassen und Vererbung - 1 -

Javakurs für Anfänger

Aufgabe 1 (Programmanalyse, Punkte)

II.4.1 Unterklassen und Vererbung - 1 -

Grafische Benutzeroberflächen

Entwurfsmuster - Iterator

Vererbung. Definition Felder Konstruktor Methoden Beispiel. Dr. Beatrice Amrhein

Vererbung P rogram m ieren 2 F örster/r iedham m er K apitel 11: V ererbung 1

Remote Method Invocation

Structural Patterns. B. Sc. Andreas Meißner

Kapitel 5: Interfaces

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Entwurfsmuster - Iterator & Composite

Strukturmuster. Definieren von Objekt-Beziehungen

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015

Wiederholung. Klassenhierarchie:

ALP II Dynamische Datenmengen

Abstrakte Basisklassen

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

13 Abstrakte Datentypen

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Das Interface-Konzept am Beispiel der Sprache Java

Grafische Benutzeroberflächen

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Software-Architektur. Design Patterns. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Transkript:

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

Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor

Sie brauchen Strom? Dann eine Steckdose suchen. Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor

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

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

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

Dieser Stecker erwartet eine andere Schnittstelle. Der Adapter konvertiert eine Schnittstelle in eine andere. Die Steckdose bietet eine Schnittstelle für den Bezug von Strom Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor

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

Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor

Client Ziel - Klasse Ihre Schnittstelle passt nicht zur Ziel-Klasse Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor

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

Client Adapter Ziel - Klasse Keine Code-Änderung beim Client und Ziel-Klasse Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor

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 Adaptierten- Schnittstelle 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

benutzt adaptiert adaptiert.spezifischeoperation() Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor

Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor

begrenzungsrahmen(); zeichne(); TextAnzeige passt nicht zu GraphischesObjekt Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor

Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor

public class TextAnzeige { private int ursprung; private int hoehe; private int breite; private String text; } Zulieferer-Klasse 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

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

Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor

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

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

Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor

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

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

Eine Adapterklasse kann mehrere Interfaces implementieren, um so für zwei oder mehr Klienten nutzbar zu sein. Dies nennt man einen n-/zwei-weg- Adapter. Der n-weg-adapter ist sowohl in Java als auch in C zu verwirklichen. Jeder normale ein-weg- Adapter ist im Prinzip ein Spezialfall des n-weg- Adapters. Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor

Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor

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

zusätzliche Delegationsschicht Einfluss auf die Performance Adapter: Inhalt Beispiel aus dem Leben Problem Lösung Definition Objekt-Adapter Beispiel: Zeicheneditor

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

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, Surround- Sound 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/06- design-patterns-d-20070510.pdf Katrin Solveig Lohan & Matthias Hillebrand http://www.techfak.unibielefeld.de/~dstoesse/seminardesignpatterns/adapter_handout.pdf Quellen