-
Welche drei Kategorien von Design Patterns gab es bei GoF?
- Creational: Objekterzeugung und Initialisierung
- Behavioral: Objekt-Orientierte Algorithmen
- Structural: Assembly von Komponenten in groessere Strukturen
-
Nennen 2 Design Patterns in jeder Kategorie (auswendig lernen)
- Creational: Factory Method, Abstract Factory
- Behavioral: Template Method, Observer
- Structural: Facade, Adapter
-
Erklaeren die konkrete Designmuster
- Factory Mehtod: statt einen Konstruktor zu verwenden, man erstellt eine statische Klasse Factory mit einer Methode createX(), die alle Argumente bekommt, bei Bedarf transformiert und der erstellte und initialisierte Objekt zurueckgibt
-
Abstract Factory zeichnen und erklaeren
- Abstract Factory kann man umsetzen als Interface mit create-Methoden, die die Objekte mit einem gemeinsamen Interface zurueckgibt.
- Verschiedene Factories werden diesen Interface implementieren, und die Objekte erstellen, die erwartete Interfaces haben.
- Welche Factory verwendet wird, wird meistens zum Laufzeit bestimmt.
-
Reelwelt Beispiel fuer Abstract Factory nennen
- Man implementiert eine GUI, die Abhaengig von Platform unterschiedliche Bibliotheken verwendet.
- Dann erstellt man ein Interface GUIFactory, die Buttons und Checkboxes erstellen kann, und implementiert WindowsGUIFactory und MacOsGUIFactory, die WindowsButtons, WindowsCheckboxes usw erstellen.
-
Template Method zeichnen und erklaeren
-
Man erstellt eine Abstrakte Klasse mit einer Methode, die mehrere Schritte hat. Fuer jeden Schritt wird eine Methode aufgerufen. Alle, oder ein Teil von Methoden laesst man abstrakt.
-
Dann in allen Subklassen muss man diese Luecken fuellen.
-
Open-Closed-Principle - Design Pattern nennen
- Template Method ist ein Pattern, der Open-Closed-Principle unterstuetzt. Originale Template Method in Superklasse bleibt unveraendert, aber man kann neue Unterklassen erstellen und dort neue Logik implementieren.
- Auch Abstract Factory
-
Warum muessen Klassen im Template abstrakt sein?
- Sonst koennte man nur Oberkasse nehmen und verwenden, dann ist es keine Template
- Abstrakte Klassen machen deutlich, welche Methoden in Subklassen implementiert werden muessen.
-
Zu welchem Problem fuehrt Nichteinhaltung von Interface-Segregation-Principle
- Interfaces werden sehr gross, und werden nicht mehr ein Aspekt darstellen
- Dann wird man diese Interfaces benutzen und leere Methoden lassen (Refused Bequest)
-
Depenceny-Inversion: welche Eigenschaften haben die Interfaces? Warum setzen wir sie ein? Warum sind die Interfaces besser als Klassen?
- Interfaces sind stabiler als Klassen und bieten gute Abstraktion
- Entkoppeln von Ebenen