수색…


비고

장식 자 사용의 장점 :

  • 다른 구성에서 런타임에 새로운 기능을 추가 할 수 있습니다.
  • 상속을위한 좋은 대안
  • 클라이언트는 자신이 사용하고자하는 구성을 선택할 수 있습니다.

카페테리아 시뮬레이션

장식자는 구조적 디자인 패턴 중 하나입니다. 객체의 동작을 추가, 제거 또는 변경하는 데 사용됩니다. 이 문서는 Decorator DP를 올바르게 사용하는 방법을 알려줍니다.

간단한 예를 들어 당신에게 그 아이디어를 설명해 드리겠습니다. 당신이 유명한 커피 회사 인 Starbobs에 있다고 상상해보십시오. 원하는 커피를 주문할 수 있습니다 - 크림과 설탕, 크림과 토핑 및 훨씬 더 많은 조합! 그러나, 모든 음료의 기초는 커피 다크, 쓴 음료, 당신은 수정할 수 있습니다. 커피 머신을 시뮬레이트하는 간단한 프로그램을 작성해 보겠습니다.

첫째, 기본 음료를 묘사하는 클래스를 만들고 추상화해야합니다.

public abstract class AbstractCoffee
{
    protected AbstractCoffee k = null;

    public AbstractCoffee(AbstractCoffee k)
    {
        this.k = k;
    }

    public abstract string ShowCoffee();
}

이제 설탕, 우유, 토핑과 같은 추가 제품을 만들어 보겠습니다. 생성 된 클래스는 AbstractCoffee 를 구현해야합니다 - 그들은 그것을 꾸밀 것입니다 :

public class Milk : AbstractCoffee
{
    public Milk(AbstractCoffee c) : base(c) { }
    public override string ShowCoffee()
    {
        if (k != null)
            return k.ShowCoffee() + " with Milk";
        else return "Milk";
    }
}
public class Sugar : AbstractCoffee
{
    public Sugar(AbstractCoffee c) : base(c) { }

    public override string ShowCoffee()
    {
        if (k != null) return k.ShowCoffee() + " with Sugar";
        else return "Sugar";
    }
}
public class Topping : AbstractCoffee
{
    public Topping(AbstractCoffee c) : base(c) { }

    public override string ShowCoffee()
    {
        if (k != null) return k.ShowCoffee() + " with Topping";
        else return "Topping";
    }
}

이제 우리는 좋아하는 커피를 만들 수 있습니다.

public class Program
{
    public static void Main(string[] args)
    {
        AbstractCoffee coffee = null; //we cant create instance of abstract class
        coffee = new Topping(coffee); //passing null
        coffee = new Sugar(coffee); //passing topping instance
        coffee = new Milk(coffee);  //passing sugar
        Console.WriteLine("Coffee with " + coffee.ShowCoffee());

    }
}

코드를 실행하면 다음과 같은 결과가 출력됩니다.

우유와 설탕을 얹은 커피



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow