C#でデザインパターン「Decoratorパターン」

C# コンピュータ
C#

オブジェクトを動的に装飾するパターン

ウィキペディアの「Decoratorパターン」のページ
Decorator パターン - Wikipedia

サンプルコード
/// <summary>
/// Decoratorパターンのサンプルコード
/// </summary>
interface IProduct
{
    string Name {get;}
    int Price{get;}
}
class Coffee : IProduct
{
    public string Name {get;}
    public int Price {get;}
    public Coffee(string name, int price)
    {
        Name = name;
        Price = price;
    }
}
class Tax : IProduct
{
    IProduct _product;

    public string Name
    {
        get
        {
            return $"{_product.Name} With Tax";

        }
    }
    public int Price
    {
        get
        {
            return (int)(_product.Price * 1.1);
        }
    }

    public Tax(IProduct product)
    {
        _product = product;
    }
}
class Gratuity : IProduct
{
    IProduct _product;

    public string Name
    {
        get
        {
            return $"{_product.Name} ,Gratuity";

        }
    }
    public int Price
    {
        get
        {
            return (int)(_product.Price * 1.3);
        }
    }

    public Gratuity(IProduct product)
    {
        _product = product;
    }
}
static class Program
{
    static public void Main()
    {
        IProduct coffee = new Coffee("Coffee", 300);
        IProduct kanCoffee = new Tax(coffee);
        IProduct caffeCoffee = new Gratuity(kanCoffee);

        Console.WriteLine($"{coffee.Name}: {coffee.Price}");
        // Coffee: 300
        Console.WriteLine($"{kanCoffee.Name}: {kanCoffee.Price}");
        // Coffee With Tax: 330
        Console.WriteLine($"{caffeCoffee.Name}: {caffeCoffee.Price}");
        // Coffee With Tax ,Gratuity: 429
    }
}

コメント