design patterns - dbs.ifi.lmu.de · design patterns sep 2018 tobias lingelmann 2018-05-08...

15
DBS Design Patterns SEP 2018 Tobias Lingelmann 2018-05-08 Wissenschaftliche Betreuer: Daniel Kaltenthaler, Johannes Lohrer Verantwortlicher Professor: Prof. Dr. Peer Kröger

Upload: others

Post on 06-Nov-2019

2 views

Category:

Documents


0 download

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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:

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