IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

decorator et composit pattern


Sujet :

C#

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 83
    Par défaut decorator et composit pattern
    Salut.

    J'aimerai bien connaitre la difference entre "decorator pattern" et "composit pattern".

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Par défaut
    Un décorateur (peut) ajoute(r) un comportement à une entité sans en changer ni la nature, ni la signature, ni le comportement.

    La composition fédère la signature de modules qui composent un ensemble relationnel afin de pouvoir s'assurer de l'adhérence de chacun des éléments. Donc l'ensemble présente la même interface que ses éléments satellitaires.

    Un exemple de composition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    namespace CompositePattern
    {
        using System;
        using System.Collections.Generic;
        using System.Linq;
        //Client
        class Program
        {
            static void Main(string[] args)
            {
                // initialize variables
                var compositeGraphic = new CompositeGraphic();
                var compositeGraphic1 = new CompositeGraphic();
                var compositeGraphic2 = new CompositeGraphic();
     
                //Add 1 Graphic to compositeGraphic1
                compositeGraphic1.Add(new Ellipse());
     
                //Add 2 Graphic to compositeGraphic2
                compositeGraphic2.AddRange(new Ellipse(), 
                    new Ellipse());
     
                /*Add 1 Graphic, compositeGraphic1, and 
                  compositeGraphic2 to compositeGraphic */
                compositeGraphic.AddRange(new Ellipse(), 
                    compositeGraphic1, 
                    compositeGraphic2);
     
                /*Prints the complete graphic 
                (four times the string "Ellipse").*/
                compositeGraphic.Print();
                Console.ReadLine();
            }
        }
        //Component
        public interface IGraphic
        {
            void Print();
        }
        //Leaf
        public class Ellipse : IGraphic
        {
            //Prints the graphic
            public void Print()
            {
                Console.WriteLine("Ellipse");
            }
        }
        //Composite
        public class CompositeGraphic : IGraphic
        {
            //Collection of Graphics.
            private readonly List<IGraphic> graphics;
     
            //Constructor 
            public CompositeGraphic()
            {
                //initialize generic Colleciton(Composition)
                graphics = new List<IGraphic>();
            }
            //Adds the graphic to the composition
            public void Add(IGraphic graphic)
            {
                graphics.Add(graphic);
            }
            //Adds multiple graphics to the composition
            public void AddRange(params IGraphic[] graphic)
            {
                graphics.AddRange(graphic);
            }
            //Removes the graphic from the composition
            public void Delete(IGraphic graphic)
            {
                graphics.Remove(graphic);
            }
            //Prints the graphic.
            public void Print()
            {
                foreach (var childGraphic in graphics)
                {
                    childGraphic.Print();
                }
            }
        }
    }

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 83
    Par défaut
    Est il possible que dans certains cas les deux patterns soient appropriés?

    PS: voire attachement.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Par défaut
    Possible? Oui. Approprié? C'est subjectif.

    Personnellement, j'utilise la décoration pour les 'cross cutting concerns'.

    Aussi, je prévilégie la composition à l'héritage, probablement à cause de ma spécialisation dans le développement de SDK et de services web.

    Mais en cherchant un peu sur le web, tu trouveras des gens qui diront le contraire...

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/03/2009, 22h06
  2. Persistence d'un pattern "composite" avec JDO
    Par Yomhgui dans le forum Persistance des données
    Réponses: 1
    Dernier message: 21/12/2008, 22h20
  3. [Décorateur] Souci Pattern Decorator
    Par olivier1978 dans le forum Design Patterns
    Réponses: 5
    Dernier message: 19/10/2007, 15h26
  4. Souci Pattern Decorator
    Par olivier1978 dans le forum C++
    Réponses: 1
    Dernier message: 19/10/2007, 11h55
  5. [Design Patterns] Decorator avec Swing ?
    Par herve91 dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 09/10/2005, 14h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo