private static void Example2() { // Segment -> Rectangle -> Ellipse IDessinForme dfSansSentinelle = new DessinerFormeEllipse(); dfSansSentinelle = new DessinerFormeRectangle() { Suivant = dfSansSentinelle }; dfSansSentinelle = new DessinerFormeSegment() { Suivant = dfSansSentinelle }; // Segment -> Rectangle -> Ellipse -> Sentinelle IDessinForme dfAvecSentinelle = new DessinerFormeSentinelle(); dfAvecSentinelle = new DessinerFormeEllipse() { Suivant = dfAvecSentinelle }; dfAvecSentinelle = new DessinerFormeRectangle() { Suivant = dfAvecSentinelle }; dfAvecSentinelle = new DessinerFormeSegment() { Suivant = dfAvecSentinelle }; List <IFormeGeometrique> formes = new List <IFormeGeometrique>() { new Ellipse(), new Rectangle(), new Segment(), new Triangle() }; Console.Out.WriteLine("Chaine sans sentinnelle : "); formes.ForEach((f) => { dfSansSentinelle.Dessiner(f); }); Console.Out.WriteLine(); Console.Out.WriteLine("Chaine avec sentinnelle : "); formes.ForEach((f) => { try { dfAvecSentinelle.Dessiner(f); } catch (Exception ex) { ConsoleColor backColor = Console.BackgroundColor; Console.BackgroundColor = ConsoleColor.Red; Console.Error.WriteLine(ex.Message); Console.BackgroundColor = backColor; } }); }