Стек: Java 11, паттерны проектирования (GoF)
Цель: дать структурированный обзор всех 23 паттернов, чтобы вы могли быстро найти нужный, понять его назначение и увидеть пример на Java. GoF (Gang of Four) — это авторы книги «Design Patterns: Elements of Reusable Object-Oriented Software» (1994):
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Они описали 23 классических паттерна проектирования, разделённых на три категории: Решают задачу создания объектов, скрывая логику инстанцирования. Гарантирует, что у класса только один экземпляр, и предоставляет к нему глобальную точку доступа. ✅ Используйте: для логгеров, конфигураций, пулов соединений.
⚠️ Избегайте: в многопоточных средах без volatile и двойной проверки. Определяет интерфейс для создания объекта, но позволяет подклассам выбрать класс. ✅ Используйте: когда тип объекта определяется во время выполнения. Создаёт семейства связанных объектов без привязки к конкретным классам. ✅ Используйте: для кроссплатформенных UI-биб
Стек: Java 11, паттерны проектирования (GoF)
Цель: дать структурированный обзор всех 23 паттернов, чтобы вы могли быстро найти нужный, понять его назначение и увидеть пример на Java. GoF (Gang of Four) — это авторы книги «Design Patterns: Elements of Reusable Object-Oriented Software» (1994):
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Они описали 23 классических паттерна проектирования, разделённых на три категории: Решают задачу создания объектов, скрывая логику инстанцирования. Гарантирует, что у класса только один экземпляр, и предоставляет к нему глобальную точку доступа. ✅ Используйте: для логгеров, конфигураций, пулов соединений.
⚠️ Избегайте: в многопоточных средах без volatile и двойной проверки. Определяет интерфейс для создания объекта, но позволяет подклассам выбрать класс. ✅ Используйте: когда тип объекта определяется во время выполнения. Создаёт семейства связанных объектов без привязки к конкретным классам. ✅ Используйте: для кроссплатформенных UI-биб
...Читать далее
Рисунок: паттерны GOG в JAVA
Стек: Java 11, паттерны проектирования (GoF)
Цель: дать структурированный обзор всех 23 паттернов, чтобы вы могли быстро найти нужный, понять его назначение и увидеть пример на Java.
Что такое GoF?
GoF (Gang of Four) — это авторы книги «Design Patterns: Elements of Reusable Object-Oriented Software» (1994):
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.
Они описали 23 классических паттерна проектирования, разделённых на три категории:
- Порождающие (Creational) — создание объектов.
- Структурные (Structural) — компоновка объектов и классов.
- Поведенческие (Behavioral) — взаимодействие между объектами.
Порождающие паттерны (Creational Patterns)
Решают задачу создания объектов, скрывая логику инстанцирования.
1.1. Singleton — Одиночка
Гарантирует, что у класса только один экземпляр, и предоставляет к нему глобальную точку доступа.
Рисунок: Паттерн Singleton
✅ Используйте: для логгеров, конфигураций, пулов соединений.
⚠️ Избегайте: в многопоточных средах без volatile и двойной проверки.
1.2. Factory Method — Фабричный метод
Определяет интерфейс для создания объекта, но позволяет подклассам выбрать класс.
Риунок: паттерн Factory Method
✅ Используйте: когда тип объекта определяется во время выполнения.
1.3. Abstract Factory — Абстрактная фабрика
Создаёт семейства связанных объектов без привязки к конкретным классам.
Рисунок: паттерн Abstract Factory
✅ Используйте: для кроссплатформенных UI-библиотек.
1.4. Builder — Строитель
Позволяет создавать сложные объекты пошагово.
Рисунок: паттерн Builder
Рисунок: пример использования паттерна Builder
1.5. Prototype — Прототип
Позволяет копировать объекты, не вдаваясь в детали их реализации.
Рисунок: паттерн Prototype
✅ Используйте: когда создание объекта дороже клонирования.
🔗 2. Структурные паттерны (Structural Patterns)
Упрощают дизайн за счёт компоновки объектов и классов.
2.1. Adapter — Адаптер
Позволяет объектам с несовместимыми интерфейсами работать вместе.
Рисунок: паттерн Adapter
✅ Используйте: при интеграции legacy-кода или сторонних библиотек.
2.2. Bridge — Мост
Разделяет абстракцию и реализацию, чтобы они могли изменяться независимо.
Рисунок: паттерн Bridge
✅ Используйте: когда и абстракция, и реализация меняются часто.
2.3. Composite — Компоновщик
Позволяет работать с древовидными структурами как с единым объектом.
Рисунок: паттерн Composite
✅ Используйте: для файловых систем, UI-деревьев.
2.4. Decorator — Декоратор
Добавляет новое поведение объекту динамически.
Рисунок: паттерн Decorator
✅ Используйте: для расширения функциональности без наследования (например, BufferedInputStream).
2.5. Facade — Фасад
Предоставляет упрощённый интерфейс к сложной подсистеме.
Рисунок: паттерн Facade, часть 1
Рисунок: паттерн Facade, часть 2
✅ Используйте: для упрощения работы с микросервисами или сложными API.
2.6. Flyweight — Приспособленец
Экономит память, разделяя общее состояние между множеством мелких объектов.
Рисунок: паттерн Flyweight
✅ Используйте: в играх (трава, деревья), текстовых редакторах (символы).
2.7. Proxy — Заместитель
Контролирует доступ к объекту, добавляя логику (ленивая инициализация, безопасность).
Рисунок: паттерн Proxy, часть 1
Рисунок: паттерн Proxy, часть 2
✅ Используйте: для lazy loading, контроля доступа, логирования.
🔄 3. Поведенческие паттерны (Behavioral Patterns)
Описывают взаимодействие между объектами и распределение обязанностей.
3.1. Chain of Responsibility — Цепочка обязанностей
Передаёт запрос по цепочке обработчиков.
Рисунок: паттерн Chain of Responsibility
✅ Используйте: для middleware (Spring Security), логирования.
3.2. Command — Команда
Инкапсулирует запрос как объект, позволяя параметризовать клиентов.
Рисунок: паттерн Command
✅ Используйте: для отмены операций, очередей задач.
3.3. Iterator — Итератор
Предоставляет способ последовательного обхода элементов коллекции.
Рисунок: паттерн Iterator
✅ Используйте: всегда, когда нужно обходить коллекцию.
3.4. Mediator — Посредник
Инкапсулирует взаимодействие между объектами, уменьшая связанность.
Рисунок: паттерн Mediator
✅ Используйте: для чатов, диалоговых окон.
3.5. Memento — Хранитель
Сохраняет внутреннее состояние объекта, не нарушая инкапсуляцию.
Рисунок: паттерн Memento
✅ Используйте: для undo/redo, сохранения состояния игры.
3.6. Observer — Наблюдатель
Определяет зависимость “один ко многим”.
Рисунок: паттерн Observer
✅ Используйте: для реактивных систем, event-driven архитектуры.
3.7. State — Состояние
Позволяет объекту менять своё поведение в зависимости от внутреннего состояния.
Рисунок: паттерн State
✅ Используйте: для конечных автоматов (машины состояний).
3.8. Strategy — Стратегия
Позволяет выбирать алгоритм во время выполнения.
Рисунок: паттерн Strategy
✅ Используйте: постоянно! Это основа гибкости.
3.9. Template Method — Шаблонный метод
Определяет скелет алгоритма, позволяя подклассам переопределять шаги.
Рисунок: паттерн Template Method
✅ Используйте: в фреймворках (Spring JdbcTemplate).
3.10. Visitor — Посетитель
Позволяет добавлять новые операции к объектам без изменения их классов.
Рисунок: паттерн Visitor
✅ Используйте: редко, но мощно для анализа AST, сериализации.
✅ Заключение
Паттерны GoF — это не готовые решения, а язык для обсуждения архитектуры.
Знание их позволяет:
- Читать код фреймворков (Spring, Hibernate),
- Проектировать гибкие и поддерживаемые системы,
- Эффективно общаться в команде.
🔑 Главное правило:
Не применяйте паттерны ради паттернов.
Применяйте их, когда решаете реальную проблему проектирования.