Das Template Method Pattern hat nichts mit Templates im üblichen Sinne zu tun, soviel vorne weg. Es schreibt vielmehr den Ablauf eines Algorithmus vor, ohne dessen einzelne Komponenten zu implementieren. Die Bestandteile werden lediglich bedingt und in ihrer Reihenfolge festgelegt, können jedoch beliebig in den erbenden Klassen umgesetzt werden.
abstract class AbstractFoo { final public function execute() { $this->init(); $this->dispatch(); $this->run() ? $this->output() : $this->setError(); } } abstract protected function init(); abstract protected function dispatch(); abstract protected function run(); abstract protected function output(); abstract protected function setError(); }
Die Klasse AbstractFoo ist als abstract deklariert, was dazu führt, dass sie nicht ohne vererbt zu werden instanziert werden kann. Die einzige öffentliche Methode execute() beinhaltet den logischen Ablauf der weiteren Methoden und ist als final deklariert um das Überschreiben dieser Methode zu unterbinden. Die einzelnen Bestandteile sind in dieser Klasse jedoch nicht konkret implementiert, sondern als abstrakte Methoden angelegt. Daraus resultiert, dass eine erbende Klasse die konkreten Implementierungen der Methoden übernehemen muss.
class ConcreteFoo extends AbstractFoo { public function init() { // konkrete Implementierung für init() } public function dispatch() { // konkrete Implementierung für dispatch() } public function run() { // konkrete Implementierung für run() } public function output() { // konkrete Implementierung für output() } public function setError() { // konkrete Implementierung für setError() } }
Eine erbende Klasse bekommt somit den eigentlichen (nicht überschreibbaren) Algorithmus "aufgedrückt" und ist dafür verantwortlich dessen Bestandteile konkret umzusetzen.








Recent comments
4 weeks 4 days ago
5 weeks 17 hours ago
21 weeks 3 days ago
27 weeks 3 days ago
27 weeks 3 days ago
28 weeks 3 days ago
28 weeks 3 days ago
49 weeks 1 day ago
50 weeks 1 day ago
1 year 32 weeks ago