Тема 13. Паттерны - BelyiZ/JavaCourses GitHub Wiki

Содержание:

  1. Что такое Шаблоны проектирования (Паттерны)
  2. Порождающие шаблоны
  3. Поведенческие шаблоны
  4. Структурные шаблоны
  5. Список литературы/курсов

Что такое Шаблоны проектирования (Паттерны)

Шаблоны проектирования или паттерны – это некоторые подходы к разработке и проектирования программного обеспечения. Это способ решения периодически возникающих проблем.

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

Паттернов достаточно много и относятся они не только к Java, но к разработке программных продуктов в целом. В данном материале мы рассмотрим только несколько из них для понимания, что это вообще такое.

Встречается и другое определение: Шаблон проектирования, или паттерн, в разработке программного обеспечения — повторяемая архитектурная конструкция, представляющая собой решение проблемы проектирования, в рамках некоторого часто возникающего контекста.

При использовании паттернов стоит помнить:

  • Шаблоны проектирования не являются решением всех ваших проблем.
  • Шаблоны — это подходы к решению проблем, а не решения для поиска проблем. Не пытайтесь использовать их в обязательном порядке — это может привести к негативным последствиям.
  • Использовать необходимо только в нужных местах. Если их правильно использовать, то они могут стать спасением, а иначе могут привести к ужасному беспорядку.

Шаблоны бывают следующих трех видов:

  • Порождающие (creational).
  • Поведенческие (behavioral).
  • Структурные (structural). А самих паттернов выделяют разное количество, но примерно 23 штуки.

В данном материале мы рассмотрим только несколько из них.

Порождающие шаблоны

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

Список основных порождающих шаблонов:

  • Простая фабрика (Simple Factory);
  • Фабричный метод (Factory Method);
  • Абстрактная фабрика (Abstract Factory);
  • Строитель (Builder);
  • Прототип (Prototype);
  • Одиночка (Singleton).

Фабричный метод — порождающий шаблон проектирования, предоставляющий подклассам интерфейс для создания объектов некоторого класса, но непосредственное решение о том, объект какого класса создавать происходит в подклассах. То есть паттерн предполагает, что базовый класс делегирует создание объектов классам-наследникам.

Пример из жизни: Рассмотрим пример с менеджером по найму. HR менеджеру нужно провести собеседования с претендентами на несколько разных специализаций, собеседование на разные специализации предполагает проверку разных навыков, которую должен провести интервьюер, соответственно HR менеджер назначает интервьюера, который проводит интервью в соответствии с конкретной специализацией.

Простыми словами: Менеджер предоставляет способ делегирования логики создания экземпляра дочерним классам.

Когда использовать: Полезен, когда есть некоторая общая обработка в классе, но необходимый подкласс динамически определяется во время выполнения. Иными словами, когда клиент не знает, какой именно подкласс ему может понадобиться.

Поведенческие шаблоны

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

Простыми словами: Поведенческие шаблоны связаны с распределением обязанностей между объектами. Их отличие от структурных шаблонов заключается в том, что они не просто описывают структуру, но также описывают шаблоны для передачи сообщений / связи между ними. Или, другими словами, они помогают ответить на вопрос «Как запустить поведение в программном компоненте?»

Список основных поведенческих шаблонов:

  • Цепочка обязанностей (Chain of Responsibility);
  • Команда (Command);
  • Итератор (Iterator);
  • Посредник (Mediator);
  • Хранитель (Memento);
  • Наблюдатель (Observer);
  • Посетитель (Visitor);
  • Стратегия (Strategy);
  • Состояние (State);
  • Шаблонный метод (Template Method).

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

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

Простыми словами: Представляет способ доступа к элементам объекта без показа базового представления.

Структурные шаблоны

Структурные шаблоны — шаблоны проектирования, в которых рассматривается вопрос о том, как из классов и объектов образуются более крупные структуры. Иначе говоря: Структурные шаблоны в основном связаны с композицией объектов, то есть с тем, как сущности могут использовать друг друга. Ещё одним объяснением было бы то, что они помогают ответить на вопрос «Как создать программный компонент?».

Список основных структурных шаблонов:

  • Адаптер (Adapter);
  • Мост (Bridge);
  • Компоновщик (Composite);
  • Декоратор (Decorator);
  • Фасад (Facade);
  • Приспособленец (Flyweight);
  • Заместитель (Proxy).

Адаптер — это структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе.

Пример из жизни: Представим, что у вас на карте памяти есть какие-то изображения и вам надо перенести их на ваш компьютер. Чтобы это сделать, вам нужен какой-то адаптер, который совместим с портами вашего компьютера. В этом случае карт-ридер — это адаптер. То есть карт-ридер позволяет объектам с разными интерфейсами (несовместимыми) взаимодействовать. Ещё одним примером будет переводчик, переводящий слова одного человека для другого.

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

Список литературы/курсов

  1. https://refactoring.guru/ru/design-patterns
  2. https://java-design-patterns.com/patterns/

Тема-12.-Enum-Перечисления | Оглавление | Тема 14. Java Code Convention