Skip to content

s862008/Design_Patterns

Repository files navigation

Design_Patterns

design patterns examples (JAVA)

В Java существует несколько популярных шаблонов проектирования, которые делятся на три основные категории: порождающие, структурные и поведенческие. Эти шаблоны предлагают готовые решения для типовых задач в разработке программного обеспечения.

Порождающие паттерны (Creational)

Шаблоны проектирования, основанные на механизме создания объектов, помогают инкапсулировать процесс инстанцирования, делая его более гибким и менее привязанным к клиентскому коду. Вот список популярных шаблонов в Java:

– “Одиночка”: этот шаблон гарантирует, что существует только один экземпляр определенного класса.

  Шаблон проектирования «Одиночка» (Singleton) предписывает наличие единственного экземпляра класса,
  доступ к которому осуществляется через статический метод. 
  Целью данного шаблона является обеспечение контроля над созданием экземпляров класса и
  предоставление глобальной точки доступа к этому экземпляру. 
  Этот шаблон может быть полезен, когда нужно контролировать количество объектов в системе или 
  обеспечить глобальную точку доступа к некоторым ресурсам, таким как соединение с базой данных или файл настроек.
  Однако следует помнить, что использование шаблона «Одиночка» может привести к проблемам с масштабируемостью 
  и тестируемостью кода, поэтому его следует применять с осторожностью.

– “Фабричный метод”: этот шаблон позволяет подклассам создавать объекты.

  Шаблон проектировани «Factory Method» (Фабричный метод) определяет интерфейс создания объекта, 
  позволяя подклассам выбирать конкретный класс для инстанцирования.

– “Абстрактная фабрика”: этот шаблон предоставляет семейство связанных объектов.

– “Строитель”: этот шаблон помогает пошагово создавать сложные объекты.

  Шаблон Строитель (Builder) — это порождающий паттерн проектирования, который позволяет создавать сложные объекты пошагово, 
  разделяя процесс конструирования от его представления. 
  Он особенно полезен, когда объект требует множества параметров или этапов инициализации, так как позволяет гибко
  настраивать его свойства, избегая громоздких конструкторов. 
  Строитель часто применяется для создания объектов с большим количеством опциональных параметров или конфигураций, например, 
  в построении запросов, UI-компонентов или сложных DTO.

– “Прототип”: этот шаблон используется для клонирования объектов.

 Паттерн «Прототип» (Prototype) в Java позволяет создавать новые объекты путём клонирования существующего 
 экземпляра (прототипа), а не через конструктор. 
 Это полезно, когда создание объекта ресурсоёмко или требует сложной инициализации.

Структурные паттерны (Structural)

Определяют способы организации объектов и классов в крупные структуры, оптимизируя взаимодействие. Вот список популярных структурных шаблонов в Java:

– “Декоратор”: этот шаблон динамически добавляет новую функциональность к объектам без изменения их кода.

  Паттерн Декоратор (Decorator)  позволяет динамически добавлять новые обязанности объектам путем обертывания их дополнительными 
  объектами-декораторами,  сохраняя интерфейс исходного класса неизменным. 
  Это гибкий способ расширения функциональности объектов без изменения их классов, 
  обеспечивая открытость системы для расширяемости и закрытость для модификации 
  существующего кода. Декораторы часто используются там, 
  где необходимо добавить дополнительные возможности к объекту индивидуально, 
  в зависимости от контекста или требований приложения.

– “Адаптер”: этот шаблон позволяет обьектам с несовместимыми интерфейсами работать вместе.

  Паттерн Адаптер (Adapter)  преобразует интерфейс одного класса в ожидаемый другим. 
  Когда применять: интеграция сторонних библиотек, работа с legacy‑кодом.
  Примеры: Arrays.asList() (преобразует массив в список)

– “Мост”: этот шаблон разделяет абстракцию и реализацию, позволяя им изменяться независимо.

  паттерн мост (Bridge)  использует композицию вместо наследования для разделения ответственности.
  Пример: JDBC‑драйверы (абстракция Connection и её реализации для разных СУБД).

– “Компоновщик”: этот шаблон объединяет объекты в древовидную структуру «часть‑целое».

 Паттерн (Composite) позволяет клиентам одинаково обращаться к отдельным объектам и их группам.
	 Когда применять: иерархия объектов (файловая система, DOM‑дерево).
 Пример: интерфейс Component в Swing/AWT (кнопки, панели, окна).

– “Фасад”: этот шаблон предоставляет упрощённый интерфейс к сложной подсистеме, скрывая сложность, делегируя вызовы внутренним компонентам.

  Шаблон Фасад (Facade) — это структурный паттерн проектирования, который предоставляет простой интерфейс
  для работы со сложной подсистемой, скрывая её детали реализации. 
  Фасад упрощает взаимодействие клиента с системой, 
  инкапсулируя множество вызовов к различным компонентам в один удобный метод. 
  Это уменьшает сложность кода, улучшает читаемость и 
  снижает зависимость клиента от внутренней структуры подсистемы. 
  Примеры использования: упрощение работы с API, библиотеками или сложными фреймворками.

– “Заместитель”: этот шаблон контролирует доступ к объекту через суррогат.

 Принцип работы Proxy: перехватывает вызовы и делегирует их реальному объекту. Примеры применения: ленивая загрузка, 
	 кэширование, контроль доступа.

Поведенческие паттерны (Behavioral)

Определяют способы взаимодействия между объектами, распределяя обязанности и устанавливая коммуникацию. Вот список популярных поведенческих шаблонов в Java:

– “Цепочка обязанностей”: этот шаблон используется для перехвата запросов отправленых от одного обьекта к другому.

Шаблон проектирования “Цепочка обязанностей” (Chain of Responsibility) позволяет передавать запрос по цепочке объектов, 
	каждый из которых может обработать его или передать следующему объекту в цепочке. Этот шаблон подходит в тех случаях, 
	когда запрос может быть обработан несколькими объектами, и мы не знаем заранее, какой именно объект должен обрабатывать запрос.
Пример использования этого шаблона может быть в системе обработки ошибок. 
У нас есть несколько уровней обработки ошибок, и мы хотим, чтобы запрос обрабатывался тем уровнем, 
	который наиболее подходит для данной ситуации. 
	Мы можем создать цепочку  объектов обработки ошибок, каждый из которых имеет свою логику обработки. 
	Если первый объект не может обработать ошибку, он передаст запрос следующему объекту в цепочке и так далее, 
	пока запрос не будет обработан или не дойдет до конца цепочки.

– “Наблюдатель”: этот шаблон устанавливает зависимость «один ко многим» между объектами, при изменении состояния одного объекта все зависимые автоматически обновляются.

 Шаблон Наблюдатель (Observer) — это поведенческий паттерн проектирования, который определяет зависимость «один ко многим» между 
	 объектами так,  что при изменении состояния одного объекта (субъекта) все зависящие от него объекты (наблюдатели) 
	 автоматически уведомляются и обновляются. 
 Это позволяет слабо связанным компонентам взаимодействовать без явных зависимостей, что упрощает поддержку и расширение кода. 
 Примеры использования: системы событий, подписки на изменения данных, UI-обновления. 

– “Состояние”: этот шаблон позволяет объекту изменять своё поведение в зависимости от внутреннего состояния, имитируя смену класса.

Паттерн Состояние (State) применим когда поведение объекта зависит от его состояния, и количество состояний велико.
Пример: автомат состояний (например, «Включен/Выключен/Режим сна»)

– “Шаблонный метод”: этот шаблон задаёт скелет алгоритма в суперклассе, позволяя подклассам переопределять отдельные шаги без изменения структуры.

Паттерн Template Method: родительский класс задаёт порядок действий, дочерние — конкретную реализацию некоторых из них.
Пример применения: приготовление напитков (общий алгоритм: вскипятить воду → заварить → налить в чашку → добавить добавки; 
	детали зависят от типа напитка — чай, кофе и т. д.).

About

design patterns examples (JAVA)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages