вторник, 3 марта 2015 г.

ПАТТЕРН ДЕКОРАТОР (DECORATOR)

Паттерн Декоратор можно описать так:

  • Берем объект "Кофе";
  • Декорируем его объектом "Сахар";
  • Декорируем его объектом "Молоко";
  • Вызываем метод cost и пользуемся делегированием для прибавления стоимости дополнений.
Паттерн Декоратор динамически наделяет объект новыми возможностями и является гибкой альтернативой субклассированию в области расширения функциональности.


// декорируемый объект
    abstract class ecDrink
    {
        public string _description = "Unknown beverage";

        public virtual string getDescription()
        {
            return _description;
        }

        public abstract double cost();

    }


// декоратор
    abstract class ecCondimentDecorator : ecDrink
    {

    }

//  конкретный класс декорируемого объекта
    class ecEspresso : ecDrink
    {
        public ecEspresso()
        {
            _description = "Espresso";
        }

        public override double cost()
        {
            return 1.99;
        }
    }


// конкретный класс декоратора
    class ecMocha : ecCondimentDecorator
    {
        private ecDrink drink;

        public ecMocha(ecDrink prmDrink)
        {
            this.drink = prmDrink;
        }


        public override string getDescription()
        {
            return drink.getDescription() + ", Mocha";
        }

        public override double cost()
        {
            return .20 + drink.cost();
        }
    }

Комментариев нет:

Отправить комментарий