Все темы / Паттерны проектирования / Шпаргалка: GoF и Enterprise

Шпаргалка: GoF и Enterprise

Паттерн — это проверенный рецепт для типовой задачи проектирования. Не код для копирования, а идея «как обычно решают вот это». Ниже — карта самых частых паттернов с примерами прямо из Java и Spring, которые ты уже видел.

Если спрашивают на собесе…

ВопросПаттерн
«Один объект на всё приложение?»Singleton
«Сложный объект с кучей полей?»Builder
«Сменить библиотеку без боли?»Adapter
«Добавить логирование/кэш к классу?»Proxy / Decorator
«Спрятать сложную систему за простым API?»Facade
«Дать выбрать алгоритм (оплату, сортировку)?»Strategy
«Уведомить всех, когда что-то случилось?»Observer
«Цепочка проверок/фильтров?»Chain of Responsibility
Копнуть глубже — GoF по группам

Порождающие (как создавать объекты):

ПаттернСутьПример в Java/Spring
Singletonодин экземпляр классаSpring Beans, Runtime, Logger
Factory Methodподкласс решает, что создатьCalendar.getInstance()
Abstract Factoryсемейства связанных объектовDocumentBuilderFactory
Builderпошаговая сборка сложного объектаStringBuilder, Lombok @Builder
Prototypeклонирование вместо newObject.clone(), @Scope("prototype")

Структурные (связи между классами):

ПаттернСутьПример
Adapterсовместить несовместимые интерфейсыInputStreamReader, slf4j
Decoratorдобавить поведение динамическиBufferedReader(new FileReader())
Facadeпростой фасад над сложнымSpring Boot, JdbcTemplate
Proxyконтроль доступа (ленивость, логи)@Transactional, Hibernate lazy
Compositeгруппа объектов как одинUI-компоненты, файловая система
Flyweightобщий кэш для экономии памятиInteger.valueOf(), String Pool

Поведенческие (взаимодействие объектов):

ПаттернСутьПример
Strategyвзаимозаменяемые алгоритмыComparator, способы оплаты
Observerоповещение зависимых об изменениях@EventListener, Kafka Listener
Chain of Responsibilityзапрос идёт по цепочкеServlet Filters, Security Filter Chain
Template Methodскелет алгоритма, шаги в подклассахJdbcTemplate, RestTemplate
Commandзапрос как объектRunnable, Callable
Iteratorобход коллекции без деталейIterator, for-each
Stateповедение зависит от состоянияOrder со статусами, FSM
Под капотом — Enterprise-паттерны (Spring/микросервисы)
ПаттернСутьПример
Repositoryслой доступа к даннымSpring Data JpaRepository
Unit of Workотслеживание изменений в транзакцииHibernate Session, @Transactional
Dependency Injectionзависимости приходят извневесь Spring (@Autowired)
Front Controllerединая точка входаDispatcherServlet
MVCразделение данных/вида/логикиSpring MVC
CQRSразделить чтение и записьread/write реплики, Axon
Event Sourcingсостояние как поток событийKafka, EventStore
Sagaраспределённые транзакции через компенсацииоркестраторы микросервисов
Null Objectпустой объект вместо nullCollections.emptyList(), Optional

Главное: ты уже пользовался этими паттернами, не зная названий. Spring — это огромный набор паттернов под капотом. Цель не зазубрить, а уметь узнать паттерн в коде и назвать его на собесе.

🎤 Закрыл тему, если можешь объяснить:
• что такое паттерн и зачем он нужен;
• приведи по одному примеру порождающего, структурного и поведенческого;
• где в Spring живут Proxy и Singleton (если дошёл до 3-го слоя).
← к теме