잊지 않겠습니다.

Decorator pattern에서는 객체에 추가적인 요소를 동적으로 첨가하는 것이 목적이다. 

하나의 class에서 다른 class로 확장되어서 나가는 하나의 그림에서 다른 그림으로 확장되어 나가는 방법을 제시할 수 있으면 된다.

  

Decorator Pattern의 주안점은 생성자이다. 생성자에서 자신이 상속받은 interface를 인자로 받아서, 전의 객체에 장식(decorator)를 해주는 것이 최선의 방법이 된다. 

  

using System;

namespace DecoratorPattern

{

  public class Program

  {

    public static void Main()

    {

      Photo photo1 = new Photo();    //With Frame photo

      Photo photo2 = new Photo();    //With Stamp & Frame Photo


      PhotoFrame photoFrame = new PhotoFrame(photo1);

       

      PhotoFrame photoFrame2 = new PhotoFrame(photo2);

      PhotoStamp photoStamp = new PhotoStamp(photoFrame2);


      Console.WriteLine(photoFrame.Display());

      Console.WriteLine(photoStamp.Display());


      Console.ReadLine();

    }

  }

   

  public interface IPhoto

  {

    string Display();

    string Print();

  }

   

  public class Photo : IPhoto

  {

    #region IPhoto Members

    public string Display()

    {

      return "Display Photo";

    }


    public string Print()

    {

      return "Print Photo";

    }


    #endregion

  }


  /// <summary>

  /// Photo with a Frame.

  /// </summary>

  public class PhotoFrame : IPhoto

  {

    readonly IPhoto originalPhoto;


    public PhotoFrame(IPhoto originalPhoto)

    {

      this.originalPhoto = originalPhoto;

    }


    #region IPhoto Members


    public string Display()

    {

      return originalPhoto.Display() + " with Frame";

    }


    public string Print()

    {

      return originalPhoto.Print() + " with Frame";

    }


    #endregion

  }


  public class PhotoStamp : IPhoto

  {

    readonly IPhoto photo;


    public PhotoStamp(IPhoto photo)

    {

      this.photo = photo;

    }


    #region IPhoto Members


    public string Display()

    {

      return photo.Display() + " with Stamp.";

    }


    public string Print()

    {

      return photo.Print() + " with Stamp";

    }

    #endregion

  }

}

Posted by Y2K
,