Обзор паттернов проектирования
Паттерн — это повторяющийся шаблон, узор или схема. Паттерны встречаются повсюду — в природе, архитектуре, поведении людей и, конечно, в программировании.
Порождающие паттерны
Порождающие паттерны проектирования — это группа шаблонов, направленных на решение задач, связанных с созданием объектов.
Структурные паттерны
Структурные паттерны — это группа шаблонов проектирования, решающих задачи организации классов и объектов таким образом, чтобы обеспечить гибкую архитектуру программного обеспечения.
Поведенческие паттерны
Поведенческие паттерны — это группа шаблонов проектирования, которые определяют способы взаимодействия объектов и распределения ответственности между ними.
Архитектурные паттерны
Архитектурные паттерны — это проверенные решения для организации структуры программного обеспечения.
Паттерны интеграции внешних систем
Интеграция систем — одна из центральных задач в современной разработке программного обеспечения.
Паттерны проектирования доменных моделей
Паттерны доменного моделирования представляют собой проверенные решения для организации бизнес-логики в программных системах.
Стратегия в 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.