Software Entwurfsmuster Flashcards
Was ist das Ziel von Entwurfsmustern?
- Lösung von Problemen unabhängig der Programmiersprache
- Jede Komponente sollte so austauschbar wie möglich sein
- Objekte sollten so unabhängig wie möglich voneinander sein
- Kommunikationsschnittstellen zwischen Objekten sollten auf das absolute Minimum reduziert werden
Vorteil: Hohe Wartbarkeit, Hohe Testbarkeit, Hohe Erweiterbarkeit
Was gilt es bei Entwurfsmustern zu beachten?
- Muster sollen Probleme vereinfachen
- Ein Muster muss zum Problem passen
- Es gibt nicht das Muster für alle Probleme
- Muster sind nicht auf objektorientierte Sprachen beschränkt
Welche 3 Arten von Pattern gibt es?
- Erzeugungsmuster
- Strukturmuster
- Verhaltensmuster
Was sind Erzeugungsmuster und was ist ihr Zweck?
- Muster die der Erzeugung von Objekten verbessert
- Motivation: Erzeugung eines Objektes und deren Verwendung soll voneinander entkoppelt werden
- Erzeugung eines Objektes mit new wird in eine eigene Klasse ausgelagert
- Die Erzeugerklasse wird über ein abstraktes Interface abgewickelt und liefert ein abstraktes Interface eines Objekts zurück.
- Erzeugerklasse kann erzeugte Objekte beliebig austauschen
*Erzeugerklasse kann beliebig ersetzt werden
Was ist das Singleton-Pattern?
- Verwendung: Wenn sicher gestellt werden muss, dass eine bestimmte Komponente nur einmal innerhalb eines Systems existiert
- Es wird über einen privaten Konstruktor und eine statische getInstance() Methode realisiert
- Die Instanz selbst ist ebenfalls statisch
Was ist die Abstract-Factory?
- Eine Abstract Factory erzeugt eine Produktfamilie, die aus einzelnen Produkten besteht. Diese Produktfamilie bilden eine Einheit.
- Die Factory kann ausgetauscht werden.
- Die Abstract Factory wird über eine Schnittstelle realisiert, die je nach Kontext konkret implementiert wird.
- Die Factory gibt abstrakte Referenzen zurück, die je nach Factory mit konkreten Unterklassen implementiert sind.
Was sind Vorteile und Nachteile der Abstract Factory?
Was ist die Factory-Method?
- Trennung von Erzeugung und Nutzung von Objekten.
- Die Erzeugung eines Objekts wird an eine Methode einer separaten Klasse (Factory-Objekt) delegiert
- Konkrete Unterklassen erzeugen Objekte für spezifische Kontexte.
- Die Factory-Methode kann parametrisiert sein.
Was sind Vor- und Nachteile der Factory-Method?
Was ist das Builder-Pattern?
- Hintergrund: Komplexe Objekte werden konstruiert, deren Erzeugung mehrere Schritte erfordert.
- Umsetzung:
- Eine Builder-Klasse wird erzeugt, die andere Objekte erzeugt
- Die Klasse erlaubt das schrittweise Festlegen von Attributen
- Eine build()-Methode erstellt dann das Objekt anhand der festgelegten Attribute
Was sind Strukturmuster und wofür benutzt man sie?
- Strukturmuster erleichtern Erstellung objektorientierter Programme durch vorgegebene Schablonen.
- Muster erklären, wie man Komponenten zu größeren Strukturen zusammensetzt.
Was ist das Facaden-Pattern?
- Eine Facade ist eine Schnittstelle zu einem komplexen System.
- Die Komplexität wird gegenüber dem Klienten verborgen. Stattdessen bietet die Fassade eine vereinfachte, eingeschränkte Schnittstelle.
- Der Klient greift ausschließlich auf die Fassade zu.
Was sind Vor- und Nachteile des Facaden-Pattern?
Was ist das Adapter-Pattern?
- Gegeben sind zwei Systeme, die miteinander kommunizieren müssen, aber keine kompatible Schnittstelle besitzen.
- Ein Adapter vermittelt zwischen den beiden Systemen
- Beide Systeme bleiben unverändert: Der Adapter übersetzt die Schnittstelle des adaptierenden Systems entsprechend der Erwartung des Klienten.
Was sind Vor- und Nachteile des Adapter-Pattern?
Was ist das Proxy-Pattern?
- Ein Proxy ist ein Stellvertreter einer anderen Klasse
- Er wird statt der originalen Klasse verwendet und kontrolliert den Zugriff auf diese Klasse.
- Ein Proxy implementiert die Schnittstelle einer anderen Klasse.
- Anfragen an die Schnittstelle werden an das Objekt weitergeleitet, können aber zusätzliche Operationen und Prüfungen durchlaufen.
Was sind Vor- und Nachteile des Proxy-Pattern?
Was ist das Decorator-Pattern?
- Ein Decorator erweitert eine Klasse um Zuständigkeiten, ohne sie abzuleiten
- Das Objekt wird durch die Erweiterung nicht verändert.
- Eine Decorator-Klasse enthält Komponenten, die sie dekorieren.
- Sie implementieren die selbe Schnittstelle, können aber auch weitere Funktionen hinzufügen.
Was sind Vor- und Nachteile des Decorator-Pattern?
Was sind Verhaltensmuster?
Grundsätzliche Motivation: Erleichtern der Kommunikation zwischen Objekten mit gleichzeitig geringer Kopplung.
Was ist das Template Method-Pattern?
- Kontext: Ein Algorithmus wird entwickelt.
- Der Ablauf des Algorithmus ist vordefiniert, Teile des Algorithmus dürfen jedoch unterschiedlich implementiert sein
- Abstrakte Klasse mit finaler Methode, die Algorithmus beschreibt.
- Algorithmus ruft eigene und abstrakte Methoden auf
Was ist das Observer-Pattern?
- Ein Objekt besitzt einen Zustand, der sich ändern kann.
- Andere Objekte (Beobachter / Observer) möchten über die Zustandsänderung informiert werden.
- Die Liste der Observer sollte dynamisch sein.
- Beispiel: Eine Controller-Klasse möchte informiert werden, wenn ein Nutzer eine GUI-Eingabe ändert. (Listener)
Was sind Vor- und Nachteile des Observer-Patterns?
Was ist das Command-Pattern?
- Befehle werden in eigene Klassen ausgelagert und als Command-Objekte verwaltet.
- Damit wird ein Aufrufer (Invoker) von einem Empfänger (Receiver) eines Befehls entkoppelt.
- Ein Aufrufer ruft Command-Objekte direkt auf. Der konkrete Empfänger ist für den Aufrufer nicht relevant
Was sind Vor- und Nachteile des Commands-Pattern
Was ist das Chain of Responsibility Pattern?
- Es gibt eine Kette von Objekten. Jedes Objekt kann spezifische Anfragen verarbeiten und kennt das nächste Objekt in der Kette.
- Eine Anfrage wird an das erste Objekt geleitet.
- Für jedes Objekt gilt:
-> Ist ein Objekt für die Anfrage zuständig, führt es ihre Verarbeitung durch.
-> Ansonsten wird die Anfrage an das nächste Objekt in der Kette weitergereicht. - Ein Objekt kann eine Anfrage verändern.
- Es ist möglich, dass kein Objekt in der Kette das Problem verarbeiten kann. Dann sollte ein Standardverhalten implementiert werden.