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