design patterns - dbs.ifi.lmu.de · design patterns sep 2018 tobias lingelmann 2018-05-08...
TRANSCRIPT
![Page 1: Design Patterns - dbs.ifi.lmu.de · Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor:](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e219995e618220d651fa0c5/html5/thumbnails/1.jpg)
DBS
Design Patterns
SEP 2018
Tobias Lingelmann2018-05-08
Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes LohrerVerantwortlicher Professor:Prof. Dr. Peer Kröger
![Page 2: Design Patterns - dbs.ifi.lmu.de · Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor:](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e219995e618220d651fa0c5/html5/thumbnails/2.jpg)
Inhalt
• Allgemeines
• Ziele von Entwurfsmustern
• Mögliche Probleme
• Verhaltensmuster (Behavioral)
• Strukturmuster (Structural)
• Erzeugungsmuster (Creational)
Design Patterns 2
![Page 3: Design Patterns - dbs.ifi.lmu.de · Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor:](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e219995e618220d651fa0c5/html5/thumbnails/3.jpg)
Allgemeines
• Wiederverwendbare Vorlagen für häufigervorkommende Herausforderungen.
• Ursprünglich aus der Architektur (Christopher Alexander, 1979)
• 1994: “GoF-Patterns” aufgrund des Buches“Design Patterns” von Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides (Gang of Four)
Design Patterns 3
![Page 4: Design Patterns - dbs.ifi.lmu.de · Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor:](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e219995e618220d651fa0c5/html5/thumbnails/4.jpg)
Ziele
• Bieten bewährte Lösungen für Probleme
• Unterstützen das Schreiben flexiblen, wiederverwendbaren und wartbaren Codes
• Helfen bei der Umsetzung bestimmter Design-Prinzipien (SOLID, etc.)
• Generell unabhängig von der Sprache (da nur „Ideen“, nicht „Implementierungen“)
Design Patterns 4
![Page 5: Design Patterns - dbs.ifi.lmu.de · Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor:](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e219995e618220d651fa0c5/html5/thumbnails/5.jpg)
Mögliche Probleme
• Nützliches Werkzeug zur Lösung bestimmter Probleme, aber nicht „Mittel für alles“. (Ein Hammer ist
für eine Schraube nur zweite Wahl. ☺ )
• Entwurfsmuster könnten fälschlicherweise als Garant für gutes Design/guten Code angesehen werden.
• Manche „Design Patterns“ werden bei falscher Anwendung zu „Anti-Patterns“.
Design Patterns 5
![Page 6: Design Patterns - dbs.ifi.lmu.de · Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor:](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e219995e618220d651fa0c5/html5/thumbnails/6.jpg)
Observer-Pattern
Ein Subjekt verwaltet eine Liste an Observern, die benachrichtigt werden, sollte sich etwas beim Subjekt ändern.
Design Patterns 6
Beispiel: Properties in JavaFXQuelle
![Page 7: Design Patterns - dbs.ifi.lmu.de · Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor:](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e219995e618220d651fa0c5/html5/thumbnails/7.jpg)
Iterator-Pattern
Ein Iterator („Cursor“) wird genutzt um sequentiell auf Daten zuzugreifen ohne deren genaue Struktur offen zu legen.
Design Patterns 7
Beispiel: for (String a : myStringList) { …
Quelle
![Page 8: Design Patterns - dbs.ifi.lmu.de · Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor:](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e219995e618220d651fa0c5/html5/thumbnails/8.jpg)
Strategy-Pattern
Erlaubt während der Laufzeit aus mehreren Algorithmen zu wählen. (Auch gut, wenn sich sonst, wenig bis nichts ändert, um Unterklassen zu vermeiden.)
Design Patterns 8
Beispiel: Unterschiedliche Sortieralgorithmen
![Page 9: Design Patterns - dbs.ifi.lmu.de · Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor:](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e219995e618220d651fa0c5/html5/thumbnails/9.jpg)
State-Pattern
Implementiert eine (endliche) Zustandsmaschine, bei der sich das Verhalten basierend auf dem aktiven Zustand ändert.
Design Patterns 9
Quelle
![Page 10: Design Patterns - dbs.ifi.lmu.de · Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor:](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e219995e618220d651fa0c5/html5/thumbnails/10.jpg)
Facade-Pattern
Versteckt ein komplexes System hinter einer einfach aufzurufenden Fassade/API.
Design Patterns 10
Quelle
![Page 11: Design Patterns - dbs.ifi.lmu.de · Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor:](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e219995e618220d651fa0c5/html5/thumbnails/11.jpg)
Singleton-Pattern
Sorgt dafür, dass nur eine Instanz dieses Objekts existiert.
Wird oft aus Bequemlichkeit genutzt, obwohl nicht nötig. → Aufpassen mit der Verwendung!
Design Patterns 11
![Page 12: Design Patterns - dbs.ifi.lmu.de · Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor:](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e219995e618220d651fa0c5/html5/thumbnails/12.jpg)
Factory-Pattern
GoF: „Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.”
Design Patterns 12
Quelle
![Page 13: Design Patterns - dbs.ifi.lmu.de · Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor:](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e219995e618220d651fa0c5/html5/thumbnails/13.jpg)
Factory-Pattern
GoF: „Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.”
Design Patterns 13
Quelle
![Page 14: Design Patterns - dbs.ifi.lmu.de · Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor:](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e219995e618220d651fa0c5/html5/thumbnails/14.jpg)
Factory-Pattern
Weit geläufiger: Irgendeine Methode, deren einzige Aufgabe es ist den Erstellungsprozess eines Objekts zu „verstecken“ und das Objekt zurück zu geben.
Design Patterns 14
public class JsonHandlerFactory {
public static JsonHandler createHandler() {
return new JsonPrintHandler();
}
}
![Page 15: Design Patterns - dbs.ifi.lmu.de · Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor:](https://reader033.vdocuments.site/reader033/viewer/2022041500/5e219995e618220d651fa0c5/html5/thumbnails/15.jpg)
Linksammlung
• https://en.wikipedia.org/wiki/Software_design_pattern
• http://www.java2s.com/Tutorials/Java/Java_Design_Patterns/index.htm
• https://www.tutorialspoint.com/design_pattern/index.htm
• https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition ;-)
• https://dzone.com/articles/java-the-factory-pattern
Design Patterns 15