Je passe en revue quelques questions de modèle de conception et j'ai regardé la définition et les exemples du motif de décorateur dans le GoF. Il ditGoF explication du motif décorateur est déroutant (ou tout simplement faux)
Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.
Il donne des exemples de décorateurs qui utilisent un héritage qui n'est définitivement pas dynamique, cependant.
NetObjectives commet la même erreur:
http://www.netobjectives.com/PatternRepository/index.php?title=TheDecoratorPattern
La discussion Portland Pattern Repository du décorateur indique qu'il ya confusion au sujet de ce qui est et n'est pas un décorateur
http://c2.com/cgi/wiki?DecoratorPattern
Wikipedia donne un sens à cette contradiction en notant que le délégué à l'intérieur du décorateur devrait être fixé au moment de la construction (d'autres techniques de DI seraient également travail)
http://en.wikipedia.org/wiki/Decorator_pattern
Tous les exemples du motif décorateur (en Java ou C++) nécessitent une construction statique soit par héritage ou par la mise en œuvre d'une interface. L'explication dans le GoF dit que les responsabilités supplémentaires sont attachées dynamiquement, cependant. Mais c'est tout simplement faux. Les commentaires de PPR parlent de langages dynamiques qui peuvent ajouter des méthodes à l'exécution, mais Java et C++ ne sont pas dynamiques et l'explication de Decorator ne dit pas qu'il est limité aux langages dynamiques comme Groovy et Lisp.
Une explication correcte de Decorator ne dirait-elle pas que dans les langages qui ne supportent pas la création de méthodes dynamiques, les constructions statiques et dyanmiques sont impliquées?
L'explication de GoF est simplement fausse comme le montrent leurs propres exemples, ou ai-je mal compris quelque chose?
Je ne pense pas que l'ajout dynamique de méthodes à l'objet compte comme décoration. Le décorateur et les objets originaux doivent être deux objets distincts. – Thilo
Pourquoi le décorateur et l'objet original doivent-ils être deux objets séparés? Y at-il quelque chose à propos du problème que Decorator résout qui impose une telle exigence sur le modèle de conception? –