Play ITЗагрузка интерактивного демо…
Паттерны проектирования — о разделе
Длинные листинги (от ~15 строк) вынесены в каталог code.spirzen.ru и подгружаются в статьях через ExternalCodeEmbed — C#, Java и другие реализации GoF не раздувают HTML энциклопедии. Короткие фрагменты и схемы mermaid остаются inline; интерактив ArchiStyler — в play.spirzen.ru.
Паттерн — имя проверенного решения повторяющейся проблемы. Сначала принципы перед паттернами и обзор; затем GoF и архитектурные стили ниже. Для Chain of Responsibility и обработки сбоев в коде — ошибки и исключения.
Repository, Unit of Work, кэш — опираются на Основы БД и проектирование БД. Карта — проектирование.
| Вопрос при изучении паттерна | Теория (глава 4) |
|---|---|
| Класс, объект, наследование, полиморфизм | ООП — о разделе |
| SOLID перед GoF | SOLID · Принципы ОО-проектирования перед паттернами — принципы |
| Инъекция зависимостей, DI-контейнер | Зависимости — о разделе |
| Observer, async callback | Асинхронность — о разделе |
| Вопрос при изучении паттерна | Теория (глава 2) |
|---|---|
| Adapter, Facade, внешний API | 2.09 Интеграция · Паттерны интеграции внешних систем — паттерны интеграции |
| HTTP, REST, контракт, статусы | API · HTTP |
| Очереди, pub/sub, Saga, DLQ | Брокеры |
| Proxy (кэш, удалённый вызов), CDN | Redis в интеграции · CDN |
| Цепочка фильтров, middleware | HTTP-экосистема |
| MVC, BFF, слой API | Как работают сайты |
Play ITЗагрузка интерактивного демо…
Как проходить раздел, чтобы не осталось "сухой теории"
Оптимальный режим изучения:
- Прочитайте обзор и выберите 1-2 паттерна, которые решают реальную проблему в вашем коде.
- Соберите минимальный пример (1 модуль, 1 сценарий), не рефакторьте весь проект сразу.
- Проверьте эффект через тесты, читаемость и скорость добавления новой функции.
- Только после этого расширяйте применение на соседние модули.
Так материал закрепляется намного лучше, чем при последовательном "прочитал и пошел дальше".
Практическая навигация по связям раздела
Если нужен плавный старт, идите так:
- Принципы перед паттернами -> для первого прохода;
- Обзор паттернов -> для общей карты;
- Порождающие, Структурные, Поведенческие -> для базового инструментария;
- Архитектурные, Интеграционные, Доменные -> для системного уровня;
- Тестирование и NFR -> чтобы оценивать решения на практике.
Три уровня
| Уровень | Примеры |
|---|---|
| GoF | Factory, Observer, Decorator — шпаргалка |
| Архитектурные | Layered, Hexagonal, MVC |
| Распределённые | Saga, Outbox, Circuit Breaker — теория: очереди, практика: design/2124, Инженерия устойчивости |
Порядок чтения
- Принципы ОО-проектирования перед паттернами — четыре опоры и связь с SOLID
- Частые паттерны GoF в реальных проектах — десять шаблонов для быстрого старта
- Обзор · порождающие · структурные · поведенческие
- Составные паттерны и MVC · архитектурные · интеграции · доменные
- Углубление — большой гид по GoF в Java; C#: Стратегия, Итератор, Фабрика, Команда, Наблюдатель. Java: Цепочка, Итератор, Посредник, Мементо, Команда, Наблюдатель, Proxy, Фасад, Builder, Bridge, Composite, Decorator, Prototype, Abstract Factory, Factory Method, Adapter, Singleton, Strategy
Тематический маршрут по паттернам
Если удобнее учить паттерны по одной теме за раз, а не по группам GoF:
Каркас системы: Проектирование — о разделе · NFR. Базовая теория сети и интеграций — 2. Система и сеть.
Практика в лаборатории
| Тема | Кейс |
|---|---|
| Паттерн Singleton на C# (реализация, DI, тесты) | "Singleton на C#" |
| Разбор ситуации перед выбором решения | "Ситуации в IT" |
| Постмортем и фиксация архитектурных уроков | "Разборы" |
| Слоистый REST-сервис (контроллер, сервис, репозиторий) | "Spring Boot приложение" |
| Интеграция с внешним API (бот как клиент) | "Telegram Bot на Python" |
Теория TDD и связь с unit-тестами — в разделе "Тестирование"; практика цикла Red-Green-Refactor — "Тренируем TDD".
Если после паттерна код сложнее объяснить за пять минут — абстракция, скорее всего, ранняя.
Обзор паттернов проектирования
Паттерн — это повторяющийся шаблон, узор или схема. Паттерны встречаются повсюду — в природе, архитектуре, поведении людей и, конечно, в программировании.
Порождающие паттерны
Порождающие паттерны проектирования — это группа шаблонов, направленных на решение задач, связанных с созданием объектов.
Структурные паттерны
Структурные паттерны — это группа шаблонов проектирования, решающих задачи организации классов и объектов таким образом, чтобы обеспечить гибкую архитектуру программного обеспечения.
Поведенческие паттерны
Поведенческие паттерны — это группа шаблонов проектирования, которые определяют способы взаимодействия объектов и распределения ответственности между ними.
Архитектурные паттерны
Архитектурные паттерны — это проверенные решения для организации структуры программного обеспечения.
Паттерны интеграции внешних систем
Интеграция систем — одна из центральных задач в современной разработке программного обеспечения.
Паттерны проектирования доменных моделей
Паттерны доменного моделирования представляют собой проверенные решения для организации бизнес-логики в программных системах.
Стратегия в C#
Паттерн Strategy в C# — классическая реализация через интерфейс, замена на Func и Action, DI и критерии выбора без лишних абстракций.
Итератор в C#
Паттерн Iterator в C# — ручной IEnumerator, генерация итератора компилятором через yield return, ленивость, LINQ и случаи, когда класс писать всё же нужно.
Фабрика в C#
Abstract Factory в C# и .NET — классическая схема через интерфейсы, замена через DI-контейнер, фабричный делегат и keyed services в .NET 8.
Команда в C#
Паттерн Command в C# — классическая схема, делегаты, MediatR, очередь задач, undo и критерии выбора между объектом команды и простым вызовом сервиса.
Наблюдатель в C#
Паттерн Observer в C# — event и делегаты, IObservable IObserver, слабая связанность, отписка и как не поймать утечки памяти в долгоживущих сервисах.
Цепочка обязанностей в Java
Chain of Responsibility в Java — цепочка обработчиков, Servlet Filter, FilterChain, пример валидации HTTP-запроса и критерии выбора паттерна.
Итератор в Java
Iterator в Java — Iterable, Iterator, PaginatedIterator для БД, ConcurrentModificationException и связь с Stream API.
Посредник в Java
Mediator в Java — снятие прямых связей между коллегами, пример GroupChatRoom, Spring MVC как медиатор и риск God Object.
Мементо в Java
Memento в Java — record ConfigMemento, originator, caretaker, откат конфигурации и сравнение с паттерном Command.
Команда в Java
Command в Java — execute/undo, TextEditor, CommandHistory, сравнение с Memento и связь со Swing Action и CQRS.
Наблюдатель в Java
Observer в Java — OrderService и listeners, Spring ApplicationEventPublisher, отписка и отличие от Mediator.
Proxy в Java
Proxy в Java — protection и caching proxy, DocumentService, Hibernate lazy, Spring AOP и отличие от Decorator.
Фасад в Java
Facade в Java — OrderFacade над складом, оплатой, доставкой и уведомлениями; сервисный слой Spring и риск God Object.
Builder в Java
Builder в Java — пошаговая сборка immutable-объекта, обязательные и опциональные параметры, пример HttpClient и сравнение с конструктором.
Bridge в Java
Bridge в Java — разделение абстракции и реализации, уведомления через email SMS push без взрыва подклассов и сравнение со Strategy.
Composite в Java
Composite в Java — лист и контейнер под одним контрактом, подсчет суммарной зарплаты по оргструктуре и ограничения состава в runtime.
Decorator в Java
Decorator в Java — цепочка оберток DataService, логирование и кеширование, сравнение с наследованием и отличие от Proxy.
Prototype в Java
Prototype в Java — clone, deep copy и copy constructor на примере отчета с дорогой инициализацией.
Abstract Factory в Java
Abstract Factory в Java — наборы Email SMS Push для AWS и Firebase, отличие от Factory Method и ограничения по расширению.
Factory Method в Java
Factory Method в Java — контракт create и делегирование создания продукта подклассам, расширение без правки клиентского кода.
Adapter в Java
Adapter в Java — переходник между несовместимыми интерфейсами, интеграция сторонней библиотеки без переписывания клиентского кода.
Singleton в Java
Singleton в Java — private constructor, getInstance, thread-safe варианты, enum singleton и ограничения глобального состояния.
Strategy в Java
Strategy в Java — семейство алгоритмов вместо if else, замена поведения во время выполнения и сравнение с Bridge.
GoF в Java - большой гид
Большой практический гид по GoF паттернам в Java: когда применять, где ошибаются чаще всего, сравнительные таблицы и Mermaid-схемы для проектирования.
Частые паттерны GoF
Десять паттернов GoF, которые чаще всего встречаются в коде и архитектуре: Factory, Singleton, Builder, Adapter, Composite, Decorator, Proxy, Strategy, Observer, Command — задача, роли, примеры и ссылки на углубление.
Принципы перед паттернами
Четыре опорных принципа объектно-ориентированного проектирования (инкапсуляция изменений, композиция, интерфейсы, слабая связь) и их связь с SOLID перед каталогом GoF.
Составные паттерны и MVC
Как паттерны GoF сочетаются в одном приложении: Model–View–Controller, Наблюдатель, Стратегия и Команда — на примере UI и Spring-слоёв.
Паттерны проектирования — о разделе
Паттерны GoF и архитектурные приёмы — как выбирать под задачу; интерактивные схемы ArchiStyler.
В подборках
Статья входит в тематические подборки и блок "С чего начать?" на главной. Соседние шаги того же маршрута:
Техлид — Роль и практика архитектора программного обеспечения, Проектирование — о разделе, Проектирование и архитектура — о разделе, Архитектура выполнения — о разделе, Специализации, Микросервисы и интеграция — о разделе.
Архитектура и проектирование ПО — Проектирование и архитектура — о разделе, Проектирование — о разделе, Архитектура десктопных приложений, Методы защиты пользовательских и корпоративных данных, Архитектура выполнения — о разделе, Микросервисы и интеграция — о разделе.