Найти тему

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

Паттерн (шаблон) проектирования — это продуманный способ построения исходного кода программы для решения часто возникающих в повседневном программировании проблем проектирования. Иными словами, это уже придуманное решения, для типичной задачи. При этом паттерн не готовое решение, а просто алгоритм действий, который должен привести к желаемому результату. Давайте рассмотрим один из наиболее часто используемых структурных паттернов — Декоратор (Decorator).

Как я уже писал ранее, существует три вида паттернов проектирования:

  • Порождающие паттерны позволяют возможность выполнять инициализацию объектов наиболее удобным и оптимальным способом.
  • Структурные паттерны описывают взаимоотношения между различными классами или объектами, позволяя им совместно реализовывать поставленную задачу.
  • Поведенческие паттерны позволяют грамотно организовать связь между сущностями для оптимизации и упрощения их взаимодействия.

Декоратор (Decorator)–  это структурный паттерн, который позволяет динамически в ходе выполнения расширять функционал объекта назначая дополнительные функциональные возможности. То есть, декоратор дает возможность удобно расширять функционал базового класса при необходимости.

Давайте рассмотрим диаграмму паттерна Декоратор.

-2

Component — базовый класс компонента, чье поведение будет расширяться декораторами

Client — работает с компонентом, не зная о существовании декораторов

ConcreteComponent — конкретная реализация компонента

Decorator — базовый класс декоратора, предназначенный для расширения поведения компонента

ConcreteDecoratorA, ConcreteDecoratorB — конкретный декоратор, который добавляет декорируемому объекту специфическое поведение.

Рассмотрим основную логику работы паттерна Декоратор. Рассмотрим совершенно обычную и повседневную ситуацию, с которой сталкивался практически любой программист – он (ну или она) проголодался и пошел в ближайший ларек за шаурмой (ну или шавермой). В продаже имеется совершено обычная шаурма, но кроме того существуют дополнительные опции, сырный или арабский лаваш, добавки в виде сыра, грибов, имбиря и аджики. И вот представьте себе, как выглядело бы меню в этом ларьке, если бы были перечислены все виды шаурмы:

  • Обычная шаурма – 100 руб.
  • Шаурма с грибами – 110 руб.
  • Шаурма с имбирем – 110 руб.
  • Шаурма с сыром – 110 руб.
  • Шаурма с грибами и сыром – 120 руб.
  • Шаурма с грибами и имбирем – 120 руб.
  • Шаурма с грибами, имбирем и сыром – 130 руб.
  • Обычная шаурма в сырном лаваше – 110 руб.
  • и так далее…

И так далее очень-очень много строчек. И чтобы запрограммировать все эти виды шармы пришлось бы создавать огромное количество классов. И для того, чтобы упростить данный механизм взаимодействия удобно использовать паттерн проектирования Декоратор, который позволит динамически определять количество добавок и варьировать от их наличия стоимость конечного продукта.

Продолжение, с деталями реализации на языке C# доступно по ссылке https://shwanoff.ru/decorator/

Наука
7 млн интересуются