Das 'Execute-Around-Method'-Pattern
Das Execute-Around-Method-Pattern ist ein schönes Pattern, zumindest für Programmiersprachen mit einem “Richtigen Objekt-System”(TM). Dabei geht es darum, eine notwendige Reihenfolge von Methoden-aufrufen einzuhalten, z.B. für Dateien: open-read-close.
void read_file(const char* filename) {
File f(filename);
f.open();
f.read();
f.close();
}Dabei ist für einen Programmierer leicht, das zu vergessen, insbesondere im Fehlerfall, z.B. beim Auftreten einer Exception.
Theoretisch ist das Pattern nur ein Spezialfall des Template-Pattern, siehe /GOF/. Trickreich wird es, wenn Fehlerbehandlung mit ins Spiel kommt:
void read_file(const char* filename) {
File f(filename);
try {
f.open();
f.read();
f.close();
} catch( Exception& e ) {
// Ooops?! Wer schliesst jetzt f?
}
}Siehe auch das Paper “Another Tale of Two Patterns” by Kevlin Henney (Sehr lesenswert, insbesondere wegen dem Ketchup-Handling! :)
Java hat dieses Pattern zum Glück seit Version 7 intus The try-with-resources Statement:
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}Quellen
- /GOF/ Template-Method-Pattern, Design Patterns - elements of reusable object-oriented software by Erich Gamma et al.
- Execute Around Method
- Another Tale of Two Patterns, Kevlin Henney