Каждый программист должен знать! 📕

Я просматривал LinkedIn и увидел сообщение о вакансии разработчика Android. Я видел термин GOF в описании должности. Этот термин был для меня совершенно новым за всю мою карьеру разработчика Android. 😅

Я начал любопытно искать в Google Что такое GOF?

Затем я узнал, что есть книга, написанная четырьмя авторами о шаблонах проектирования.

Что такое банда четырех?

The Gang Of Four являются авторами книги Паттерны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования.

Это важная книга, в которой описаны двадцать три шаблона объектно-ориентированного дизайна и различные методы разработки. Четыре автора:

  1. Эрих Гамма
  2. Ральф Джонсон
  3. Джон Влиссидес
  4. Ричард Хелм

Обзор

Я не буду описывать здесь всю книгу целиком, а лишь представлю небольшую картинку, чтобы развить у вас интерес к чтению этой книги.

Для лучшего понимания Gang Of Four описала каждый шаблон проектирования с помощью UML-диаграммы, взяв реальные примеры с кодированием.

Они разделили все шаблоны проектирования на три категории.

  1. Творческие шаблоны
  2. Структурные образцы
  3. Поведенческие модели

# 1) Шаблоны создания

Первый шаблон проектирования - это шаблон создания. Он предоставляет способы создания отдельных объектов или групп связанных объектов. Таких шаблонов пять:

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

# 2) Структурные образцы

Второй тип шаблона проектирования - это структурный шаблон. Он обеспечивает способ определения отношений между классами или объектами.

  • Адаптер: преобразование интерфейса класса в интерфейс, ожидаемый клиентами. Адаптер позволяет классам работать вместе, что иначе было бы невозможно из-за несовместимых интерфейсов.
  • Мост: отделите абстракцию от ее реализации, чтобы они могли различаться независимо.
  • Составные: объединяйте объекты в древовидные структуры для представления иерархий частично и полностью. Composite позволяет клиентам одинаково обрабатывать отдельные объекты и композиции объектов.
  • Декоратор: динамически прикрепляйте к объекту дополнительные обязанности. Декораторы предоставляют гибкую альтернативу созданию подклассов для расширения функциональности.
  • Фасад. Предоставляет единый интерфейс для набора интерфейсов в подсистеме. Фасад определяет интерфейс более высокого уровня, который упрощает использование подсистемы.
  • Легковес: используйте общий доступ для эффективной поддержки большого количества мелкозернистых объектов.
  • Прокси-сервер: укажите суррогат или заполнитель для другого объекта, чтобы контролировать доступ к нему.

# 3) Паттерны поведения

Последний тип паттерна проектирования - паттерн поведения. Он определяет способы общения между классами и объектами.

  • Цепочка ответственности: избегайте связывания отправителя запроса с его получателем, давая возможность нескольким объектам обработать запрос. Объедините получающие объекты в цепочку и передайте запрос по цепочке, пока объект не обработает его.
  • Команда: инкапсулирует запрос как объект, тем самым позволяя параметризовать клиентов с различными запросами, очередями или запросами журнала, а также поддерживать операции, которые невозможно выполнить.
  • Интерпретатор: для данного языка определите представление для его грамматики вместе с интерпретатором, который использует это представление для интерпретации предложений на языке.
  • Итератор: предоставляет способ последовательного доступа к элементам агрегированного объекта, не раскрывая его базовое представление.
  • Посредник: определите объект, который инкапсулирует взаимодействие набора объектов. Посредник способствует слабой связи, не позволяя объектам явно ссылаться друг на друга, и позволяет независимо изменять их взаимодействие.
  • Памятка: не нарушая инкапсуляции, фиксируйте и экстернализируйте внутреннее состояние объекта, чтобы его можно было восстановить в это состояние позже.
  • Наблюдатель: определите зависимость между объектами "один-ко-многим", чтобы при изменении состояния одного объекта все его иждивенцы получали уведомление и автоматически обновлялись.
  • Состояние: позволяет объекту изменять свое поведение при изменении его внутреннего состояния. Объект будет казаться меняющим свой класс
  • Стратегия. Определите семейство алгоритмов, инкапсулируйте каждый из них и сделайте их взаимозаменяемыми. Стратегия позволяет алгоритму изменяться независимо от клиентов, которые его используют.
  • Шаблонный метод. Определите скелет алгоритма в операции, перенеся некоторые шаги на подклассы. Шаблонный метод позволяет подклассам переопределять определенные шаги алгоритма без изменения структуры алгоритма.
  • Посетитель: представляют собой операцию, выполняемую над элементами структуры объекта. Visitor позволяет вам определить новую операцию, не изменяя классы элементов, с которыми он работает.

Дальнейшее чтение: