Par exemple, supposons que j'ai une classe de produit que je peux ajouter à un panier. Je peux vouloir l'emballer ensemble avec un autre article quand il est également dans le chariot et ajouter un escompte de 15%. La classe de produit doit-elle être décorée avec une nouvelle sous-classe permettant des offres, ou faut-il redéfinir la classe de produits pour permettre au chariot d'attacher un objet «stratégie» de réduction de prix au produit, en réduisant le prix?Quand est-il approprié de créer un décorateur pour un objet, et quand est-il approprié de réécrire votre objet pour permettre l'application de stratégies?
Ceci est un exemple abstrait, alors prenez-le où vous voulez.
Vous avez utilisé un mot ici que je vais inclure dans ma réponse: "Injecter". J'ai tendance à mettre l'injection et les stratégies ensemble. J'ai tendance à penser à la décoration comme ajoutant à la fonctionnalité existante, et j'ai tendance à utiliser des décorateurs ESPECIALLY quand ma méthode child.SomeMethod() appelle 'base.SomeMethod()' –
Donc, en utilisant cet exemple artificiel, vous diriez il serait plus approprié d'avoir le panier "reconnaître" l'affaire, l'emballage des produits dans le panier dans une classe de décorateur "Discounted Product"? – Zak
Comme écrit, oui. En réalité, en ce qui concerne les produits et les chariots, vous voudrez probablement connaître le prix original ainsi que le prix réduit pour pouvoir déclarer le montant économisé, auquel cas l'exemple s'effondre. –