Каждый программист должен знать! 📕
Я просматривал LinkedIn и увидел сообщение о вакансии разработчика Android. Я видел термин GOF в описании должности. Этот термин был для меня совершенно новым за всю мою карьеру разработчика Android. 😅
Я начал любопытно искать в Google Что такое GOF?
Затем я узнал, что есть книга, написанная четырьмя авторами о шаблонах проектирования.
Что такое банда четырех?
The Gang Of Four являются авторами книги Паттерны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования.
Это важная книга, в которой описаны двадцать три шаблона объектно-ориентированного дизайна и различные методы разработки. Четыре автора:
Обзор
Я не буду описывать здесь всю книгу целиком, а лишь представлю небольшую картинку, чтобы развить у вас интерес к чтению этой книги.
Для лучшего понимания Gang Of Four описала каждый шаблон проектирования с помощью UML-диаграммы, взяв реальные примеры с кодированием.
Они разделили все шаблоны проектирования на три категории.
- Творческие шаблоны
- Структурные образцы
- Поведенческие модели
# 1) Шаблоны создания
Первый шаблон проектирования - это шаблон создания. Он предоставляет способы создания отдельных объектов или групп связанных объектов. Таких шаблонов пять:
- Абстрактная фабрика. Предоставляет интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов.
- Строитель: отделяйте построение сложного объекта от его представления, чтобы один и тот же процесс построения мог создавать разные представления.
- Заводской метод: определите интерфейс для создания объекта, но позвольте подклассам решать, какой класс создавать. Фабричный метод позволяет классу отложить создание экземпляров до подклассов.
- Прототип: укажите типы объектов, которые нужно создать, используя прототип, и создайте новые объекты, скопировав этот прототип.
- Синглтон: убедитесь, что у класса есть только один экземпляр, и предоставьте ему глобальную точку доступа.
# 2) Структурные образцы
Второй тип шаблона проектирования - это структурный шаблон. Он обеспечивает способ определения отношений между классами или объектами.
- Адаптер: преобразование интерфейса класса в интерфейс, ожидаемый клиентами. Адаптер позволяет классам работать вместе, что иначе было бы невозможно из-за несовместимых интерфейсов.
- Мост: отделите абстракцию от ее реализации, чтобы они могли различаться независимо.
- Составные: объединяйте объекты в древовидные структуры для представления иерархий частично и полностью. Composite позволяет клиентам одинаково обрабатывать отдельные объекты и композиции объектов.
- Декоратор: динамически прикрепляйте к объекту дополнительные обязанности. Декораторы предоставляют гибкую альтернативу созданию подклассов для расширения функциональности.
- Фасад. Предоставляет единый интерфейс для набора интерфейсов в подсистеме. Фасад определяет интерфейс более высокого уровня, который упрощает использование подсистемы.
- Легковес: используйте общий доступ для эффективной поддержки большого количества мелкозернистых объектов.
- Прокси-сервер: укажите суррогат или заполнитель для другого объекта, чтобы контролировать доступ к нему.
# 3) Паттерны поведения
Последний тип паттерна проектирования - паттерн поведения. Он определяет способы общения между классами и объектами.
- Цепочка ответственности: избегайте связывания отправителя запроса с его получателем, давая возможность нескольким объектам обработать запрос. Объедините получающие объекты в цепочку и передайте запрос по цепочке, пока объект не обработает его.
- Команда: инкапсулирует запрос как объект, тем самым позволяя параметризовать клиентов с различными запросами, очередями или запросами журнала, а также поддерживать операции, которые невозможно выполнить.
- Интерпретатор: для данного языка определите представление для его грамматики вместе с интерпретатором, который использует это представление для интерпретации предложений на языке.
- Итератор: предоставляет способ последовательного доступа к элементам агрегированного объекта, не раскрывая его базовое представление.
- Посредник: определите объект, который инкапсулирует взаимодействие набора объектов. Посредник способствует слабой связи, не позволяя объектам явно ссылаться друг на друга, и позволяет независимо изменять их взаимодействие.
- Памятка: не нарушая инкапсуляции, фиксируйте и экстернализируйте внутреннее состояние объекта, чтобы его можно было восстановить в это состояние позже.
- Наблюдатель: определите зависимость между объектами "один-ко-многим", чтобы при изменении состояния одного объекта все его иждивенцы получали уведомление и автоматически обновлялись.
- Состояние: позволяет объекту изменять свое поведение при изменении его внутреннего состояния. Объект будет казаться меняющим свой класс
- Стратегия. Определите семейство алгоритмов, инкапсулируйте каждый из них и сделайте их взаимозаменяемыми. Стратегия позволяет алгоритму изменяться независимо от клиентов, которые его используют.
- Шаблонный метод. Определите скелет алгоритма в операции, перенеся некоторые шаги на подклассы. Шаблонный метод позволяет подклассам переопределять определенные шаги алгоритма без изменения структуры алгоритма.
- Посетитель: представляют собой операцию, выполняемую над элементами структуры объекта. Visitor позволяет вам определить новую операцию, не изменяя классы элементов, с которыми он работает.