Les décorateurs sont des objets qui implémentent le motif de conception Décorateur.
Classiquement un objet PXXO peut avoir N objets fils. Dans le cas d'un objet widget, c'est la méthode putwidget qui permet d'ajouter un fils.
Objet A | Objet A
| \_ Objet A.1
| \_ Objet A.1.1
| \_ Objet A.2
putWidget
Avec la notion de Décorateur, un objet va pouvoir changer de parent. Il va pouvoir s'ajouter autant de parents qu'il le souhaite. Dans le cas d'un widget, c'est la méthode addDecorator qui permet d'ajouter un père.
Objet A | Objet 1
| \_ Objet 2
| \_ Objet 3
| \_ Objet A
|
addDecorator
Typiquement, l'objet est décoré par plusieurs autres objets.
On associe un décorateur à un widget avec la méthode addDecorator de l'objet à décorer.
$objet = new ObjetPxxo; // ajout d'un décorateur avec son nom $this->addDecorator('Decorateur_1'); // ajout d'un décorateur avec son instance $this->addDecorator(new Decorateur_2);
Un objet décorateur n'est rien d'autre qu'un objet Pxxo avec un attribut particulier nommé widget.
class Decorateur extends Pxxo_Widgets { var $widget; var $_params = array('widget'); function __construct($params) { $this->Pxxo_Widgets($params, __FILE__); } function defaut() { $this->setTemplate('defaut', 'border.php.html'); if ($this->widget) $this->putWidget('OBJET', $this->widget); } }
Le package Pxxo_Widget_Decorator contient 6 décorateurs prêt à l'emploi :