Software Design Patterns Creational Patterns Structural Patterns Behavioral

Software Design Patterns • Creational Patterns • Structural Patterns • Behavioral Patterns – Behavioral Class Patterns • Interpreter • Template Method Pattern – Behavioral Object Patterns

Behavioral Patterns • Algorithmen • Zuständigkeiten zwischen Objekten/ Klassen • Kommunikation zwischen Objekten/ Klassen • „Wie agieren Objekte/Klassen miteinander? “

Template Method Pattern • Ziel: – Möglichkeit zur Variierung eines Algorithmus – Hierbei festes Grundgerüst • Umsetzung: – Abstrakter Grundalgorithmus – Subklassen definieren konkretes Verhalten

Template Method Pattern Abstract. Class Template. Method() Primitive. Operation 1() Primitive. Operation 2() Concrete. Class Primitive. Operation 1() Primitive. Operation 2() . . . Primitive. Operation 1(). . . Primitive. Operation 2(). . .

Praxisbeispiel Haus Abstrakte Klasse + baue. Haus() - ebne. Boden() # do. Baue. Rohbau() # do. Baue. Dach() . . . ebne. Boden(); do. Baue. Rohbau(); do. Baue. Dach(); . . . Template Method Backsteinhaus # do. Baue. Rohbau() # do. Baue. Dach() Konkrete Klassen Blockhaus # do. Baue. Rohbau() # do. Baue. Dach()

Code abstract public class Haus { final public void baue. Haus() { System. out. println(". . . baue Haus. . "); ebne. Boden(); do. Baue. Rohbau(); do. Baue. Dach(); System. out. println("fertig ist das Hausn"); } final private void ebne. Boden() { System. out. println(". . . ebne Boden. . . "); } abstract protected void do. Baue. Rohbau(); abstract protected void do. Baue. Dach(); }

Code public class Backsteinhaus extends Haus{ protected void do. Baue. Rohbau() { System. out. println(". . . baue Backstein-Rohbau. . . "); } protected void do. Baue. Dach() { System. out. println(". . . baue Backstein-Dach. . . "); } public static void main(String args[]) { Backsteinhaus b 1 = new Backsteinhaus(); b 1. baue. Haus(); } }

Ausgabe Wenn Blockhaus analog: . . . baue Haus. . . ebne Boden. . . baue Backstein-Rohbau. . . baue Backstein-Dach. . . fertig ist das Haus. . . baue Haus. . . ebne Boden. . . baue Blockhaus-Rohbau. . . baue Blockhaus-Dach. . . fertig ist das Haus

Folgerungen für Algorithmus • feste Reihenfolge • Subklassen können Schritte variieren (nicht Reihenfolge)

Vorteile • Beim Haus: – Beliebig viele Häuser mit unterschiedlicher Bauweise (->Verhalten) denkbar – Code „do. Ebne. Boden()“ muss nur einmal geschrieben werden – Dach ist an richtiger Stelle

Vorteile • Allgemein: – Einmalige Implementierung von unveränderlichem Verhalten, Subklassen können variables Verhalten implementieren – Vermeidung von Code Duplication – Kontrolle der Erweiterungen der Subklassen

Auswirkungen • Fundamentale Technik für Wiederverwendung von Code • Invertierte Kontrollstruktur ( -> Hollywood-Prinzip)

Quellen • Print: – Gamma, Helm, Johnson, Vlissides, „Design Patterns“, Addison-Wesley • Internet: – http: //www. agcs. com/supportv 2/techpapers/patter ns • Bei Fragen: – jd 05@hdm-stuttgart. de – nd 06@hdm-stuttgart. de
- Slides: 13