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 TemplateMethod() PrimitiveOperation1() PrimitiveOperation2() AbstractClass ConcreteClass PrimitiveOperation1() PrimitiveOperation2()... PrimitiveOperation1()... PrimitiveOperation2()...
Praxisbeispiel Haus + baueHaus() - ebneBoden() # doBaueRohbau() # doBaueDach()... ebneBoden(); doBaueRohbau(); doBaueDach();... Backsteinhaus # doBaueRohbau() # doBaueDach() Blockhaus # doBaueRohbau() # doBaueDach() Abstrakte Klasse Konkrete Klassen Template Method
Code abstract public class Haus { final public void baueHaus() { System.out.println("...baue Haus.."); ebneBoden(); doBaueRohbau(); doBaueDach(); System.out.println("fertig ist das Haus\n"); } final private void ebneBoden() { System.out.println("...ebne Boden..."); } abstract protected void doBaueRohbau(); abstract protected void doBaueDach(); }
Code public class Backsteinhaus extends Haus{ protected void doBaueRohbau() { System.out.println("...baue Backstein-Rohbau..."); } protected void doBaueDach() { System.out.println("...baue Backstein-Dach..."); } public static void main(String args[]) { Backsteinhaus b1 = new Backsteinhaus(); b1.baueHaus(); }
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 doEbneBoden() 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: – ns Bei Fragen: