Template Method Entwurfsmuster?

Math55

Mitglied
hallo, ich bin grad dabei, mir ein kleines framework zu basteln. dabei will ich das template method entwurfsmuster nutzen. soll also ein whitebox framework werden. also das prinzip besteht ja darin, die einschubmethode der framework klasse zu überschreiben und somit spezieles verhalten einzufügen. das standardverhalten, wird in der framework klasse gekapselt und muss dann nicht mehr jedes mal aufs neue implementiert werden. ich hab also 3 klassen:

Code:
public abstract class FrameWork { //abstract, damit man keine instanz bilden kann
    public abstract void hook(); //wird dann mit speziellem verhalten überschrieben
    public void template(){ //implementiert standardverhalten und ruft hook auf
        System.out.println("1");
        System.out.println("2");
        hook();
        System.out.println("3");
    }
}
dann natürlich die klasse, die das spezielle verhalten implementiert:

Code:
public class SpecificClass extends FrameWork{

    
    public void hook(){ //überschreiben von hook aus FrameWork
        System.out.println("hook");
    }
    
}
und dann eine klasse, die alles startet:

Code:
public class HookTester {
    public static void main(String[] args){
        SpecificClass sc = new SpecificClass();
        //und nun?
    }
}
als ergebnis sollte dann 1 2 hook 3 rauskommen. aber wie muss ich das denn nun anstellen, damit das klappt?
es muss ja in FrameWork auch die template() aufgerufen werden und wenn ich in HookTester jetzt sowas mache wie sc.hook(), dann wird ja nur hook ausgegeben? sicher hab ich da was nicht verstanden! jemand eine idee?


danke :)
 
Hallo und Halli,

Also eigetnlich gibst Du Dir schon selbst die Antwort.
in anderen Worten, Code der nicht aufgerufen wird, tut auch nichts

Ich hoffe mal dass Du im richtigen Programmieren die Methoden anders benennst, denn sonst wird niemand Deine Programme schnell genug verstehen, allein wegen der Bezeichnungen. Es ist anzunehmen, dass Du die Namen hier nur wegen der Abstraktion so gewählt hast. Ich selbst empfehle für Mehtoden grundsätzlich Verben oder Verben in Verbindung mit Nomen zu verwenden.
Sorry, wenn ich bei Dir womöglich offene Türen einrenne, aber z.Z. habe ich z.B. einen Kollegen, der auch gerne Techniken unhinterfragt aus Büchern nimmt, und dann Methoden, die z.B. ein Objekt ins Leben rufen (instanziieren) factory nennt. Vermutlich weil man solche Mehtoden auch factory-methoden nennt. Die natürlichen Sprachen verbinden allerdings Nomen mit Objekten und eigentlich nicht Tätigkeiten (Methoden).

viel Spaß und Glück

Takidoso
 
hi, alles klar. nene, die methoden heissen hier nur so zur veranschaulichung ;). sonst nenn ich die schon so, damit man gleich weiss, was los ist. ja, sc.template war die lösung...eigentlich logisch :|

vielen dank
 
Hi,

wenn Du in dem Constructor der Klasse FrameWork die Methode template rufst dann wird diese beim Erzeugen des Objektes automatisch aufgerufen. In Folge dessen auch die spezifische hook().

Code:
public abstract class FrameWork { //abstract, damit man keine instanz bilden kann

    public FrameWork() {
        template();
    }

    public abstract void hook(); //wird dann mit speziellem verhalten überschrieben
    public void template(){ //implementiert standardverhalten und ruft hook auf
        System.out.println("1");
        System.out.println("2");
        hook();
        System.out.println("3");
    }
}

Gruß

Romsl
 
Zurück