5 Entwurfsmuster Flashcards

1
Q

Was ist ein Entwurfsmuster?

A

Darstellung wiederkehrender Entwurfslösungen in objektorientierten Softwaresystemen.

Abstrahiert relevante Aspekte einer allgemeinen Entwurfsstruktur durch Identifikation

  • der teilnehmenden Klassen und Objekte,
  • der Rollen
  • der Interaktionen zwischen den Rollen und
  • der ihnen zugeteilten Aufgaben

Jedes Entwurfsmuster assoziiert eine bestimmte Klasse von objektorientierten Entwurfsproblemen.

Entwurfsmuster enthalten typischerweise:

  • abstrakte Klassen(also nicht instanziierbar)
  • konkrete Klassen zur Konkretisierung des Musters
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Nennen Sie die Klassifikationen von Entwurfsmustern.

A

Nach Aufgabe:

Erzeugungsmuster (creational) z.B. abstract factory, singleton, (factory method)
Strukturmuster (structural) z.B. adapter, proxy, bridge, decorator, composite, (facade, flyweight)
Verhaltensmuster (behavioral) z.B. template method, command, observer, strategy, visitor, chain of responsibility

Nach Gültigkeitsbereich:

Klassenbasiert
Objekt- bzw. Instanzbasiert.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Beschreiben Sie kurz das Entwurfsmuster ‘Singleton’ (wozu wird es eingesetzt und wie sieht es aus)

A

Wird eingesetzt, wenn nur eine Instanz einer Klasse verfügbar sein soll auf der globale Operationen ausgeführt werden.

Enthält Klassenvariable singletonInstance, die die einzige Instanz von Singleton enthält.

Typischerweise ist eine Methode getInstance() vorhanden, die wie folgt aussieht:

Singleton getInstance() {
   if (singletonInstance == null) singletonInstance = new Singleton();
   return singletonInstance;
}

Wichtig: der Konstruktor von Singleton ist private. Forciert Umweg über getInstance().

Verwendung typischerweise: Singleton.getInstance().singletonOperation();

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Beschreiben Sie kurz das Entwurfsmuster ‘Abstract Factory’ (wozu wird es eingesetzt und wie sieht es aus)

A

Wird eingesetzt um eine Schnittstelle zum konsistenten Erzeugen verwandter oder voneinander abhängiger Produkte anzubieten, ohne die ihrer gemeinsamen Erzeugung zugrundeliegende Fabrik benennen zu müssen.

AbstractFactory -> ConreteFactory1, ConcreteFactory2 … ConcreteFactoryN

ConreteFactory1
-> ConcreteProduct1A
-> ConcreteProduct1B
...
-> ConcreteProduct1Z

Beispiel:

Abstract GUI-Factory

  • > MotifFactory (Unix)
  • > PMFactory (O/S 2)
  • > MacFactory (Mac)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Beschreiben Sie kurz das Entwurfsmuster ‘Adapter’ (wozu wird es eingesetzt und wie sieht es aus)

A

Adapter bezeichnet ein Strukturmuster.

Übersetzung einer vorgegebenen Schnittstelle einer Klasse in eine andere Schnittstelle, wie sie von einem Client erwartet wird.

Zwei Varianten:

  • Adapter mit Vererbung (klassenbasiert)
  • Adapter mit Delegation (objektbasiert)

Klassenbassiert:
Adapter1 erbt von Dienst und implementiert Interface.
Aufruf: Adapter1.anfrage() -> Adapter1.service()

Objektbasiert:
Adapter1 hat Referenz auf Dienst und implementiert Interface.
Aufruf: Adapter1.anfrage() -> Dienst.service()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Beschreiben Sie kurz das Entwurfsmuster ‘Bridge’ (wozu wird es eingesetzt und wie sieht es aus)

A

Bridge bezeichnet ein objektorientiertes Strukturmuster.

Durch Einsatz des Brücke-Entwurfsmusters werden Schnittstellen und Implementierungen in zwei getrennte Vererbungshierarchien organisiert.

Sie ermöglicht es, die Implementierung erst zur Laufzeit auszuwählen bzw. zu variieren.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Beschreiben Sie kurz das Entwurfsmuster ‘Proxy’ (wozu wird es eingesetzt und wie sieht es aus)

A

Proxy bezeichnet ein objektorientiertes Strukturmuster.

Kontrolliert Zugriff auf ein Objekt mit Hilfe eines vorgelagerten Stellvertreterobjekts.
Erlaubt in Abhängigkeit vom Kontrollergebnis eventuell zusätzliche Diensterbringung seitens des Proxy.

Klient -> Subject (abstract)

Proxy -> Subject (abstract)
RealSubject -> Subject (abstract)

Proxy gibt im Bedarfsfall Methoden an RealSubject weiter.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Beschreiben Sie kurz das Entwurfsmuster ‘Decorator’ (wozu wird es eingesetzt und wie sieht es aus)

A

Decorator bezeichnet ein objektorientiertes Strukturmuster.

Dynamische Erweiterung der Zuständigkeit eines Dienstes eines Objekts zur Laufzeit.

Beispiel für mehrstufige Dekorierer: FrameDecorator dekoriert ScrollbarDecorator dekoriert TextView

Decorator —> Component (interface)
Decorator (aggregates) –> Component (interface)

ConcreteComponent1 -> Component
ConcreteComponent2 -> Component

ConcreteDecoratorA -> Decorator
ConcreteDecoratorB -> Decorator

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Beschreiben Sie kurz das Entwurfsmuster ‘Composite’ (wozu wird es eingesetzt und wie sieht es aus)

A

Kompositum bezeichnet ein objektbasiertes Strukturmuster.

Objekte werden zu einer Baumstruktur zusammengefügt, um eine Teil-Ganzes-Hierarchie zu repräsentieren.

Ermöglicht, dass Klienten sowohl einzelne Objekte als auch Kompositionen von Objekten einheitlich behandeln können.

operation() wird an alle Kindobjekte propagiert.
Rekursiv, falls Kind wieder Composite ist.
Falls Kind ein Blattknoten darstellt, wird die eigentliche Operation ausgeführt.

Composite — (composite-aggregates) —> 0..* Components

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Beschreiben Sie kurz das Entwurfsmuster ‘Template Method’ (wozu wird es eingesetzt und wie sieht es aus)

A

Schablonenmethode bezeichnet ein klassenbasiertes Verhaltensmuster.

Schablonenhafte Beschreibung eines Algorithmus, die bezüglich einer Reihe von Implementierungsdetails Freiheitsgrade zulässt (z.B. zu verwendende Such-bzw. Sortierverfahren); diese werden nachträglich (spätestens zur Übersetzungszeit) festgelegt.

AbstractClass:
+ templateMethod() // uses primitiveOperation1 and 2 internally
+ primitiveOperation1() (abstract)
+ primitiveOperation2() (abstract)

ConcreteClass -> AbstractClass implements:
+ primitiveOperation1()
+ primitiveOperation2()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Beschreiben Sie kurz das Entwurfsmuster ‘Command’ (wozu wird es eingesetzt und wie sieht es aus)

A

Befehl bezeichnet ein objektorientiertes Verhaltensmuster.

Befehle werden in Objekte gekapselt um:

  • Befehle potentiellen Aufrufern als Parameter zu übergeben,
  • Befehle durch eine Queue zu verwalten,
  • ein Logbuch über ausgeführte Befehle zu führen
  • und damit Befehle rückgängig zu machen.

Beispiel: Menüeinträge (GUI)

Makrobefehl: Sequentielle Zusammenfassung von mehreren auszuführenden Befehlen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Beschreiben Sie kurz das Entwurfsmuster ‘Observer’ (wozu wird es eingesetzt und wie sieht es aus)

A

Beobachter bezeichnet ein objektbasiertes Verhaltensmuster.

Änderungen an einem Objekt sollen auf alle weiteren davon abhängigen Objekte konsistent übertragen werden.
Dies soll erfolgen, ohne die betroffenen Objekte (geänderte und anzupassende) in eine gemeinsame Klasse integrieren zu müssen.

Typisches Beispiel: Mehrere views auf gleiche Daten.

  • > Tabelle (beobachtet Daten)
  • > Säulendiagramm (beobachtet Daten)
  • > Kuchendiagramm (beobachtet Daten)

Data —-|> Subject (abstract) —-> 0..* Observer (abstract)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Beschreiben Sie kurz das Entwurfsmuster ‘Strategy’ (wozu wird es eingesetzt und wie sieht es aus)

A

Strategie ist ein objektbasiertes Verhaltensmuster.

Einige Teile einer Aufgabe können unterschiedlich gelöst werden.
Die aktuelle Variante soll zur Laufzeit vom Klient auswählbar sein.
Der nicht variable Teil der Aufgabe soll nur einmal gespeichert werden, um Redundanz zu vermeiden.

Beispiel: Textverarbeitung enthält nicht variable Textverwaltungsfunktionen sowie variable Formatierungen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Beschreiben Sie kurz das Entwurfsmuster ‘Chain of Responsibility’ (wozu wird es eingesetzt und wie sieht es aus)

A

Zuständigkeitskette ist ein objektbasiertes Verhaltensmuster.

Der Klient kennt zur Laufzeit nicht genau den Bearbeiter der von ihm erwünschten Anfrage.
Zur Bearbeitung spezieller Anfragen kommen unterschiedliche Diensterbringer in Frage.
Die Menge der für einen speziellen Dienst in Frage kommenden Bearbeiter soll dynamisch festlegbar sein.

Beispiel: Kontextsensitive Hilfe.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly