Verständnis Decorator Design Pattern in C#

Ich habe gerade angefangen zu lernen Decorator Design Pattern, leider musste ich gehen durch verschiedene refrences zu verstehen, das Dekorator-Muster in einer besseren Art und Weise führte mich in große Verwirrung. also, so weit wie mein Verständnis, das ist Sorge, ich glaube, das ist eine decorator-Muster

interface IComponent
    {
        void Operation();
    }
    class Component : IComponent
    {
        public void Operation()
        {
            Console.WriteLine("I am walking ");
        }
    }
    class DecoratorA : IComponent
    {
        IComponent component;
        public DecoratorA(IComponent c)
        {
            component = c;
        }
        public void Operation()
        {
            component.Operation();
            Console.WriteLine("in the rain");
        }
    }
    class DecoratorB : IComponent
    {
        IComponent component;
        public DecoratorB(IComponent c)
        {
            component = c;
        }
        public void Operation()
        {
            component.Operation();
            Console.WriteLine("with an umbrella");
        }
    }
    class Client
    {
        static void Main()
        {
            IComponent component = new Component();
            component.Operation();

            DecoratorA decoratorA = new DecoratorA(new Component());
            component.Operation();

            DecoratorB decoratorB = new DecoratorB(new Component());
            component.Operation();

            Console.Read();
        }
    }

kann aber den code unten auch Dekorator-Muster?

class Photo
{
    public void Draw()
    {
        Console.WriteLine("draw a photo");
    }
}
class BorderedPhoto : Photo
{
    public void drawBorder()
    {
        Console.WriteLine("draw a border photo");
    }
}
class FramePhoto : BorderedPhoto
{
    public void frame()
    {
        Console.WriteLine("frame the photo");
    }
}
class Client
{
    static void Main()
    {
        Photo p = new Photo();
        p.Draw();

        BorderedPhoto b = new BorderedPhoto();
        b.Draw();
        b.drawBorder();

        FramePhoto f = new FramePhoto();
        f.Draw();
        f.drawBorder();
        f.frame();
    }
}

Mein Verständnis

aus dem zweiten Beispiel von mir, nennen wir Sie alle drei Methoden, aber aus dem ersten Beispiel, das ich nicht in der Lage, Zugang zu allen drei Methoden erstellen ein einzelnes Objekt.

  • 1 - Dekorator, 2 - nicht. Von meinem Standpunkt aus, Dekorateur sollten wrap eingerichtet Objekt 🙂
  • decorator wird angenommen, zu verlängern, die Methoden, richtig!!!!!. warum dann das zweite ist nicht ein Dekorator-Muster? Könnten Sie mir helfen zu verstehen?
  • Ich würde sagen, es ist da ein decorator schmückt eine vorhandene Instanz. Wenn ich bereits eine Instanz von Photo, ich kann nicht einfach dekorieren Sie es mit BorderedPhoto, würde ich erstellen Sie eine Instanz von BorderedPhoto und kopieren Sie dann Eigenschaften aus meiner ursprünglichen Photo Instanz. Das ist nicht die Dekoration.
  • Wenn du gehen Sie hier [sourcemaking.com/design_patterns], Lesen Sie die "Kritik" - Abschnitt. Insbesondere Unter idealen factoring, ein Konzept, das nicht kopiert, sondern lediglich referenziert. Aber wenn etwas ist, referenziert und nicht kopiert, dann gibt es keine "Muster" zu label und Katalog.. . . .Sagen wir ich habe eine Klasse A. class A { public A (B contained){} }. . .und A aussetzen veränderte Verhalten von B. Es ist auch Dekorateur. Nein, kein proxy. Proxy erstellen müssen class B in sich selbst per definition. So, mein Punkt ist, die Muster, die Sie Lesen, über klassische Implementierungen, aber fühlen Sie sich frei, Sie zu interpretieren.
  • vielen Dank für die explanantion 🙂
Schreibe einen Kommentar