“Decorator”

Post von realloc | Einsortiert in Code am 10. März 2007 | Keine Kommentare

Das Design-Pattern “Decorator” (auch Wrapper) übernimmt dynamisch die Verantwortung für ein Objekt. Es wird nicht die Klasse erweitert, sondern das Objekt zur Laufzeit mit Funktionalität angereichert.

Um ein anschauliches Beispiel für einen Decorator zu geben, nehme ich das Objekt, daß in meinem Factory Method-Beispiel erzeugt wurde, um die Ausgabe der repr-Methode wahlweise in einen HTML-p- oder div-Container zu packen.

<?php

class Decorator {
    var $_obj;

    function Decorator ($obj) {
        $this->_obj = $obj;
    }
}

class PDecorator extends Decorator {

    function repr () {
        return '<p>' . $this->_obj->repr() . '</p>';
    }
}

class DivDecorator extends Decorator {

    function repr () {
        return ' <div>' . $this->_obj->repr() . '</div> ';
    }
}

?>

Um die Klassen etwas generischer zu halten, habe ich einen Superklasse definiert, die in ihrem Konstruktor die Referenz eines Objektes aufnimmt. Die speyialisierten Dekorator-Klassen geben mit der jeweils definierten repr-Methode die modifizierte Ausgabe des ursprünglichen Objektes zurück.

[code lang="php"]
$obj = Factory::create (__FILE__);
$d = new PDecorator ($obj);
print $d->repr ();
$d = new DivDecorator ($obj);
print $d->repr ();
[/code]

Have fun!

Möglicherweise interessiert Dich auch...



Einen Kommentar schreiben