Код IT
← Каталог

Паттерны проектирования — Декоратор (Decorator)

Фрагмент из «Паттерны проектирования»: Декоратор (Decorator).

csharp projectencyclopedia7-06-proektirovanie-i-arhitektura-115 embed URL статья в энциклопедии
C# main.cs
public interface ICoffee
{
    decimal GetCost();
    string GetDescription();
}

public class SimpleCoffee : ICoffee
{
    public decimal GetCost() => 50;
    public string GetDescription() => "Кофе";
}

public abstract class CoffeeDecorator : ICoffee
{
    protected readonly ICoffee _coffee;
    public CoffeeDecorator(ICoffee coffee) => _coffee = coffee;

    public virtual decimal GetCost() => _coffee.GetCost();
    public virtual string GetDescription() => _coffee.GetDescription();
}

public class MilkDecorator : CoffeeDecorator
{
    public MilkDecorator(ICoffee coffee) : base(coffee) { }

    public override decimal GetCost() => base.GetCost() + 10;
    public override string GetDescription() => base.GetDescription() + ", с молоком";
}

public class SugarDecorator : CoffeeDecorator
{
    public SugarDecorator(ICoffee coffee) : base(coffee) { }

    public override decimal GetCost() => base.GetCost() + 5;
    public override string GetDescription() => base.GetDescription() + ", с сахаром";
}
public interface ICoffee
{
    decimal GetCost();
    string GetDescription();
}

public class SimpleCoffee : ICoffee
{
    public decimal GetCost() => 50;
    public string GetDescription() => "Кофе";
}

public abstract class CoffeeDecorator : ICoffee
{
    protected readonly ICoffee _coffee;
    public CoffeeDecorator(ICoffee coffee) => _coffee = coffee;

    public virtual decimal GetCost() => _coffee.GetCost();
    public virtual string GetDescription() => _coffee.GetDescription();
}

public class MilkDecorator : CoffeeDecorator
{
    public MilkDecorator(ICoffee coffee) : base(coffee) { }

    public override decimal GetCost() => base.GetCost() + 10;
    public override string GetDescription() => base.GetDescription() + ", с молоком";
}

public class SugarDecorator : CoffeeDecorator
{
    public SugarDecorator(ICoffee coffee) : base(coffee) { }

    public override decimal GetCost() => base.GetCost() + 5;
    public override string GetDescription() => base.GetDescription() + ", с сахаром";
}