Шаблоны программирования на Swift: Decorator

decorator_design_patterns_proSwift_ru2

 

В этой статье мы разберем шаблон программирования Декоратор (Decorator) на языке программирования Swift в среде разработки Xcode.

Decorator

Класный пример декоратора – различные чехлы для новых телефонов.  Для начала у нас есть телефон. Но так как телефон дорогой, мы будем очень счастливы если он не разобьется при любом падении – потому мы покупаем чехол для него. То есть, к уже существующему предмету мы добавили функционал защиты от падения. Ну еще мы взяли стильный чехол – теперь наш телефон еще и выглядит отлично. А потом мы докупили съемный объектив, с помощью которого можно делать фотографии с эффектом “рыбьего глаза”. Декорировали наш телефон дополнительным функционалом:)

Вот, приблизительно так выглядит реально описание паттерна декоратор. Теперь описание GoF:
Декоратор добавляет некий функционал уже существующему объекту.

Когда использовать этот паттерн:

1. Вы хотите добавить определенному объекту дополнительные возможности, при этом не задевая и не меняя других объектов

2. Дополнительные возможности класса – опциональны

Радость Swift в данном случае – это использование расширений extension. Я не буду детально описывать расширения в этой статье, но в двух словах все же расскажу: Расширения – это возможность расширить любой объект дополнительным функционалом без использования механизма наследования. Давайте возьмем супер простой пример – декорирование Cocoa классов. К примеру добавим новый метод для объекта NSDate:

Как видим наше расширение определяет только один метод “convertDateToString”, который дату форматирует в текстовый формат

Собственно, это все.

Лог выглядит ожидаемо:

Пример с GitHub

decorator_design_patterns_proSwift_ru

Шаблон декоратор используется для расширения или изменения функциональности объектов во время выполнения программы, обернув их в объект класса декоратора. Это обеспечивает гибкую альтернативу наследованию для изменения поведения.

Напитки, которые унаследованы от кофейного декоратора имеют свои стоимость и ингредиенты.

Опубликовано в Фундаментальные основы, Шаблоны программирования iOS Swift Метки:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*