# Unterschiede einiger Patterns



## PattuX (17. Jul 2016)

Hey, für meine Prüfung muss ich folgende Patterns kennen und können:

Iterator, Factory Method, Class Adapter, Object Adapter, Composite, Singleton, Strategy, Template Method, Observer und State.

Iterator, Object Adapter, Composite, Singleton und Observer sind mir klar.

Fragen zum Rest:
Sehe ich das richtig, dass Template Method und Strategy sich lediglich darin unterscheiden, dass Template Method eine abstrakte Klasse ist und Strategy ein interface, sodass Template Method default Verhalten festlegen kann und in den Subklassen nicht jede Methode überschrieben werden muss im Gegensatz zur Strategy?
Dazu dann auch gleich die Frage: Ist das State Pattern prakitsch das Template Method Pattern, nur dass der Zustand automatisch entscheidet, welche Implementation genutzt wird, anstatt dass der User das entscheiden kann?
Auch dazu: Ist das Factory Method Pattern ein Template Method Pattern, das nur für das Erstellen von Objekten erzeugt wird?

Den Object Adapter verstehe ich gar nicht... Lt. Wikipedia (https://en.wikipedia.org/wiki/Adapter_pattern#Class_Adapter_pattern), delegiert der Adaptor, wie beim Object Adapter, an den Adaptee weiter. Der Adaptor imlementiert beliebig viele Interfaces (Adaptees), aber wie genau stellt er fest, welche Methode er jetzt ausführen soll, wenn der Client methodA() aufruft?


----------



## AndyJ (18. Jul 2016)

PattuX hat gesagt.:


> Sehe ich das richtig, dass Template Method und Strategy sich lediglich darin unterscheiden, dass Template Method eine abstrakte Klasse ist und Strategy ein interface, sodass Template Method default Verhalten festlegen kann und in den Subklassen nicht jede Methode überschrieben werden muss im Gegensatz zur Strategy?


Das Template Method pattern ist ein Muster der Code-Vererbung. Man schreibt den Code, der immer gleich ist im Template und ueberlaesst die Implementierung der Details demjenigen der die Subklasse implementiert.

Strategy kann man verwenden, wenn es eine Anzahl verschiedener Implementierungen fuer dieselbe Methode gibt. Diese Varianten kann man in separaten Klassen implementieren, die alle dasselbe Interface implementieren. Das ist dann besser, wenn die Klassen, die den Algorithmus verwenden nichts miteinander zu tun haben. Wenn's nur eine Klasse waere, die den Algorithmus benoetigt, dann koennte man ja einfach davon Subklassen ableiten.


----------



## AndyJ (18. Jul 2016)

PattuX hat gesagt.:


> Den Object Adapter verstehe ich gar nicht... Lt. Wikipedia (https://en.wikipedia.org/wiki/Adapter_pattern#Class_Adapter_pattern), delegiert der Adaptor, wie beim Object Adapter, an den Adaptee weiter. Der Adaptor imlementiert beliebig viele Interfaces (Adaptees), aber wie genau stellt er fest, welche Methode er jetzt ausführen soll, wenn der Client methodA() aufruft?



Wenn der Client methodA() aufruft, ruft der Adapter auf dem Adaptee ebenfalls methodA() auf.

```
public void methodA() {
   adaptee.methodA();
}
```


----------

