Шаблоны проектирования по-человечески: структурные паттерны

2
19035
Добавить в избранное

Структурные паттерны связаны со структурами из объектов, с тем, как эти объекты взаимодействуют друг с другом.

структурные паттерны

Характеристика

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

  1. Наследование. Определение реализации подклассами, а интерфейса – базовым классом.
  2. Композиция, при которой структуры образуются через объединение нескольких объектов.

Структурные паттерны: классификация

Данные шаблоны делятся на:

  1. Adapter
  2. Bridge
  3. Composite
  4. Decorator
  5. Facade
  6. Flyweight
  7. Proxy

1. Паттерн Адаптер

Представьте, что у вас есть несколько фото, которые хранятся на карте памяти. Вам нужно перенести их на компьютер, а чтобы это сделать, необходим адаптер, совместимый и с картой, и с портами ПК. Именно такую функцию выполняет паттерн Adapter: обеспечивает взаимосвязь классов и несовместимых интерфейсов.

В качестве другого примера рассмотрим игру, в которой есть охотник и львы. Для начала нам потребуется интерфейс Lion:

И есть охотник, который ожидает реализации интерфейса Lion для охоты:

Теперь добавим в игру класс WildDog, на который охотник тоже должен охотиться. Вот только это нельзя сделать напрямую, так как у динго другой интерфейс. Чтобы сделать класс совместимым с классом охотника, нужен адаптер:

Используем:

Теперь рассмотрим другие структурные паттерны.

2. Паттерн Мост

Есть сайт с разными страницами, и пользователь должен иметь возможность изменять тему. Что делать? Можно создать копии страниц для каждой из тем или же просто загрузить темы отдельно. Структурные паттерны Bridge позволят реализовать второй вариант.

Паттерн Мост

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

Наш пример в виде кода, в котором представлена иерархия WebPage:

И отдельная иерархия тем:

Реализовываем их:

3. Паттерн Компоновщик

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

Здесь представлены разные типы сотрудников:

Далее представляем организацию, в которой состоят различные сотрудники:

Используем:

4. Паттерн Декоратор

В отличие от статического механизма наследования, паттерн Decorator работает динамически. Он может добавлять объектам необходимую функциональность в процессе.

Рассмотрим в качестве примера кофе. Прежде всего, у нас есть простой кофе с соответствующим интерфейсом:

Но мы хотим добавить дополнительные параметры:

Теперь сделаем наш кофе:

5. Паттерн Фасад

Как включить компьютер? Все мы привыкли, что для этого достаточно нажать одну кнопку, и никто не задумывается, что при этом происходит на самом деле. Как и простое включение компьютера, Facade паттерн позволяет использовать максимально простой интерфейс для доступа к библиотеке, системе классов или фреймворку.

Итак, у нас есть класс «Computer»:

А здесь расположен фасад:

Теперь мы можем использовать фасад:

6. Паттерн Flyweight

Вы когда-нибудь заказывали чай в кафе? Они зачастую делают больше одной чашки, приносят вам ваш чай, а остальное сохраняют для других клиентов. Структурные паттерны Flyweight как раз этим и занимаются, чем экономят память.

У нас есть чай и тот, кто его готовит:

Также есть кафе, где принимаются и выполняются заказы:

Используем:

7. Паттерн Proxy

Пользуетесь карточкой доступа, чтобы открыть дверь? Есть несколько вариантов открытия такой двери: это можно сделать с помощью карты доступа или же через нажатие кнопки, которая обходит безопасность. Главная функция двери – открываться, но также есть и дополнительный функционал.

Есть интерфейс двери:

Ее защита:

Используем:

Также рекомендуем Вам посмотреть:

Шаблоны проектирования по-человечески: 6 порождающих паттернов, которые упростят жизнь
Шаблоны проектирования по-человечески: поведенческие паттерны в примерах
Лучший видеокурс по шаблонам проектирования
4 лучших книг о шаблонах проектирования
20 полезных навыков, которые можно освоить за 3 дня

Хотите получать больше интересных материалов с доставкой?

Подпишитесь на нашу рассылку:

И не беспокойтесь, мы тоже не любим спам. Отписаться можно в любое время.




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

  1. Шаблон «Компоновщик».
    Я не php программист, мне не понятно, а где protected roles классов Designer и Developer?

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