Лабораторная работа #2
Декоратор — это структурный паттерн проектирования, который позволяет динамически добавлять объектам новую функциональность, оборачивая их в полезные «обёртки».
В качестве базового компонента используется Coffee, а в качестве обёрток Caramel, WhippedCream и Milk. Декоратор позволяет использовать любые из обёрток в любых количестве и порядке применения.
Заместитель — это структурный паттерн проектирования, который позволяет подставлять вместо реальных объектов специальные объекты-заменители. Эти объекты перехватывают вызовы к оригинальному объекту, позволяя сделать что-то до или после передачи вызова оригиналу.
В качестве реального объекта используется RegularCoffeeMachine, которая просто выдаёт результат заказа. В качестве прокси выступает PoliteCoffeeMachine, который использует функциональность RegularCoffeeMachine, но при этом выдаёт ещё и дружелюбные сообщения для пользователя.
Команда — это поведенческий паттерн проектирования, который превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их, а также поддерживать отмену операций.
В качестве команд выступают заказы (Order) на различные напитки. Кофемашина не знает, с каким конкретным заказом она работает, но ей всё равно, так как все заказы имплементируют один интерфейс заказов.
Фасад — это структурный паттерн проектирования, который предоставляет простой интерфейс к сложной системе классов, библиотеке или фреймворку.
В качестве фасада выступает объект CoffeeMaker, который ограничивает все возможные комбинации напитков только необходимыми пользователю
Мост — это структурный паттерн проектирования, который разделяет один или несколько классов на две отдельные иерархии — абстракцию и реализацию, позволяя изменять их независимо друг от друга.
Мост реализован в классе Drink. Существуют различные виды напитков (большой, средний) и различное содержимое (американо, латте, латте с карамелью, кофе со взбитыми сливками). Для решения этой задачи применяется паттерн мост, который разделяет содержимое напитка и его контейнер на два слоя: абстракцию и реализацию.