Академический Документы
Профессиональный Документы
Культура Документы
1
}
public override void Operation()
{
if (component != null)
component.Operation();
}
}
class ConcreteDecoratorA : Decorator
{
public override void Operation()
{
base.Operation();
}
}
class ConcreteDecoratorB : Decorator
{
public override void Operation()
{
base.Operation();
}
}
Участники:
Component: абстрактный класс, определяет интерфейс для наследуемых объектов
ConcreteComponent: конкретная реализация компонента, в которую с помощью
декоратора добавляется новая функциональность
Decorator: собственно декоратор, реализуется в виде абстрактного класса и имеет
тот же базовый класс, что и декорируемые объекты. Поэтому базовый класс Component должен
быть по возможности легким и определять только базовый интерфейс.
Класс декоратора также хранит ссылку на декорируемый объект в виде объекта базового
класса Component и реализует связь с базовым классом как через наследование, так и через
отношение агрегации.
Классы ConcreteDecoratorA и ConcreteDecoratorB представляют
дополнительные функциональности, которыми должен быть расширен объект
ConcreteComponent.
Рассмотрим пример. Допустим, у нас есть пиццерия, которая готовит различные типы
пицц с различными добавками. Есть итальянская, болгарская пиццы. К ним могут добавляться
помидоры, сыр и т.д. И в зависимости от типа пицц и комбинаций добавок пицца может иметь
разную стоимость. Теперь посмотрим, как это изобразить в программе на C#:
class Program
{
static void Main(string[] args)
{
Pizza pizza1 = new ItalianPizza();
pizza1 = new TomatoPizza(pizza1); // итальянская пицца с томатами
Console.WriteLine("Название: {0}", pizza1.Name);
Console.WriteLine("Цена: {0}", pizza1.GetCost());
5
class Camel : IAnimal
{
public void Move()
{
Console.WriteLine("Верблюд идет по пескам пустыни");
}
}
// Адаптер от Camel к ITransport
class CamelToTransportAdapter : ITransport
{
Camel camel;
public CamelToTransportAdapter(Camel c)
{
camel = c;
}
public void Drive()
{
camel.Move();
}
}
И консоль выведет:
Ход работы
Контрольные вопросы
6
7