Je trouve le motif de décorateur pour être le plus déroutant. Veuillez considérer l'exemple fourni dans "Livre de la première designs de conception".
p> Donc pour obtenir un darkroast em> avec double moka et un fouet, vous devez écrire p> je pense que cela est inutile. Voici ma mise en œuvre, P> interface Beverage
{
int Cost();
}
class DarkRoast : Beverage
{
/* .... */
}
class Mocha : Beverage
{
/* .... */
}
class Whip : Beverage
{
/* .... */
}
// here is the changed part
class Order
{
List<Beverage> beverages = new List<Beverage> beverages();
public void AddItem(Beverage b)
{
beverages.Add(b);
}
public int Cost()
{
int cost;
foreach(Beverage b in beverages)
cost += b.Cost();
}
}
// use it like
Order order = new Order();
order.AddItem(new DarkRoast());
order.AddItem(new Mocha());
order.AddItem(new Mocha());
order.AddItem(new Whip());
int cost = order.Cost();
3 Réponses :
Non, ils ne sont pas les mêmes.
La tête premier exemple a 1 boisson avec moka, fouet, rôti ajouté. Votre exemple a 3 boissons. Votre code crée 3 boissons (ce qui signifie que quelqu'un a commandé 3 choses séparément). Le but de la décorateur est - à décorer.
.NET a un textwriter et un indentedtextwriter (je suppose), qui prend essentiellement le texte normal de la vôtre et applique l'indentation. Il est similaire aux tuyaux Unix d'une manière d'une manière, si vous y pensez. P> entrée -> Tweaks -> Entrée modifiée -> En outre Tweaks -> Entrée en outre. Je ne sais pas si je l'ai bien expliqué. P> p>
Voir ce premier code de la tête. Il fonctionne sur le même exemple de la boisson p>
Dans la vie réelle, ce ne sont pas des boissons, je suppose. La boisson est une et des saveurs ajoutées sur le dessus. P>
La sortie de l'opération de courant devient entrée pour une opération suivante. P>
Voir ce premier code de la tête. Cela fonctionne sur le même exemple de la boisson. I> Ce n'est pas le même exemple. Chaque décorateur ultérieur prend une instance de la précédente. C'est la même variable mais il est attribué différentes instances.
@CODINGYOSHI: Oui. Ce que je voulais dire, c'est que la même variable est utilisée et une nouvelle instance enveloppe une instance existante pour créer une nouvelle boisson. Merci :)
@Edwardolamisan: OP montre une alternative possible au décorateur et ne pas demander des alternatives.
Le point entier du motif de décorateur consiste à ajouter des responsabilités via la composition d'objet, pas d'héritage. L'héritage est statique, obj. La composition est dynamique et plus flexible. Les possibilités de décoration sont infinies. Il est également possible de décorer un objet pendant l'exécution. P>
Pouvez-vous donner plus d'idées sur l'ONU-décoration?
Je pense que vous représentez réellement quelque chose de complètement différent. p>
Dans votre exemple, vous avez un ordre d'appel d'objet qui reçoit des boissons et dans la première fois, ils décorent simplement une boisson avec des garnitures, cela provoque le problème principal suivant. P>