2009-06-09 6 views
2

Le motif Décorateur est-il principalement utilisé pour obtenir un objet avec des fonctionnalités supplémentaires choisies dynamiquement?Pouvons-nous garder une liste de fonctionnalités à l'intérieur du motif Décorateur au lieu d'utiliser l'imbrication?

Peut-on faire quelque chose comme

window = Window.new(widht, height, x, y, [UseScrollBar.new, DrawBorder.new]) 

de sorte que lorsque l'on appelle tirage au sort(), on boucle aussi à travers les fonctionnalités supplémentaires? Par exemple, si notre but est d'écrire une ligne dans un fichier, avec l'imbrication, nous devons écrire plusieurs fois (plusieurs lignes dans le fichier), mais avec la boucle, nous pouvons être plus flexibles sur ce que nous faisons: la ligne de texte, mais parcourez la liste des fonctionnalités supplémentaires, donc si elle est vide, nous écrivons la ligne, mais s'il y a AddLineNumber, ou AddTimeStamp, alors la ligne est modifiée, puis une seule ligne est écrite dans le fichier. J'espère que je comprends le motif assez pour donner une question précise. Est-ce que certaines personnes implémentent le motif Décorateur en utilisant une liste de fonctionnalités supplémentaires au lieu d'imbriquer?

Répondre

1

Cela dépend si la liste des fonctions ajoutées est fixe ou flexible. Vous pouvez aussi avoir une sorte de constructeur pour créer la chaîne pour vous:

window = WindowBuilder.new 
         .setWidth(w) 
         .setHeight(h) 
         .setX(x) 
         .setY(y) 
         .addScrollBar(scrollBar) 
         .addBorder(border) 
         .getWindow(h); 

et vous serez un point de BorderDecorator au décorateur de la barre de défilement, les points à la fenêtre réelle.

0

mon sentiment est qu'il peut. qu'il s'agisse d'une liste de fonctions supplémentaires ou imbriquées, il devrait toujours être en mesure de fournir des fonctionnalités supplémentaires.

Questions connexes