---
title: Основные понятия
seo:
  title: Основные понятия — Java Developer
  description: Тема «Основные понятия» для собеседования Java Developer. Что такое «шаблон проектирования»? Назовите основные характеристики шаблонов.
---

[Все темы Java Developer](/java-developer)

## <strong>Что такое «шаблон проектирования»?</strong> [#q-14bee738d69b81dbb594e11b20782ab8]

«Шаблон проектирования» (<code>design pattern</code>) — это повторяемое решение общей проблемы проектирования программного обеспечения. Шаблоны проектирования предоставляют проверенные практики и структуры, которые помогают разработчикам создавать гибкие и поддерживаемые системы. Они не являются конкретным кодом, а скорее описанием способов организации кода для решения типичных задач. Шаблоны проектирования делятся на три основные категории&#58;

1. <strong>Порождающие (</strong>
   <code>Creational Patterns</code>
   <strong>)</strong>&#58; касаются способов создания объектов, обеспечивая
   гибкость и повторное использование кода. Примеры&#58; Singleton, Factory
   Method, Abstract Factory.

1. <strong>Структурные (</strong>
   <code>Structural Patterns</code>
   <strong>)</strong>&#58; касаются организации классов и объектов для создания
   новых функциональностей. Примеры&#58; Adapter, Composite, Decorator.

1. <strong>Поведенческие (</strong>
   <code>Behavioral Patterns</code>
   <strong>)</strong>&#58; касаются взаимодействия между объектами и
   распределения обязанностей. Примеры&#58; Observer, Strategy, Command.

Шаблоны проектирования помогают улучшить архитектуру и качество кода, делая его более понятным и легким в сопровождении.

:::note[Ссылки для изучения]

1. [Паттерны проектирования в Java](https://javarush.com/groups/posts/2267-patternih-proektirovanija-v-java)
   :::

---

## <strong>Назовите основные характеристики шаблонов</strong> [#q-14bee738d69b81feb0f5e3c6465ee1b5]

Основные характеристики шаблонов проектирования включают&#58;

1. <strong>Повторяемость</strong>&#58; Решения, предоставляемые шаблонами, могут
   быть многократно использованы в различных проектах и ситуациях.

1. <strong>Абстракция</strong>&#58; Шаблоны описывают концептуальные решения,
   которые можно реализовать разными способами в зависимости от контекста.

1. <strong>Документированность</strong>&#58; Шаблоны подробно описаны, включая
   проблему, контекст, решение и последствия использования.

1. <strong>Гибкость</strong>&#58; Шаблоны предлагают гибкие решения, которые
   можно адаптировать под конкретные нужды проекта.

1. <strong>Независимость от языка программирования</strong>&#58; Шаблоны
   описывают общие концепции и могут быть реализованы на любом языке
   программирования.

1. <strong>Улучшение архитектуры</strong>&#58; Использование шаблонов помогает
   создавать более структурированные, понятные и поддерживаемые системы.

:::note[Ссылки для изучения]

1. [Паттерны проектирования в Java](https://javarush.com/groups/posts/2267-patternih-proektirovanija-v-java)
   :::

---

## <strong>Какие бывают типы шаблонов проектирования?</strong> [#q-14bee738d69b8194a699eaa2083596f8]

Типы шаблонов проектирования делятся на три основные категории&#58;

{/* prettier-ignore */}
1. <strong>Порождающие (</strong><code>Creational Patterns</code><strong>)</strong>&#58;

    - <strong>Singleton</strong>&#58; Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.

    - <strong>Factory Method</strong>&#58; Определяет интерфейс для создания объекта, но позволяет подклассам изменять тип создаваемого объекта.

    - <strong>Abstract Factory</strong>&#58; Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов без указания их конкретных классов.

    - <strong>Builder</strong>&#58; Отделяет построение сложного объекта от его представления, так что один и тот же процесс построения может создавать разные представления.

    - <strong>Prototype</strong>&#58; Создает новые объекты путем копирования существующего объекта-прототипа.

1. <strong>Структурные (</strong><code>Structural Patterns</code><strong>)</strong>&#58;

    - <strong>Adapter</strong>&#58; Преобразует интерфейс класса в интерфейс, ожидаемый клиентом, позволяя работать с несовместимыми интерфейсами.

    - <strong>Composite</strong>&#58; Составляет объекты в древовидные структуры для представления иерархий часть-целое, позволяя клиентам работать с отдельными объектами и их комбинациями единообразно.

    - <strong>Decorator</strong>&#58; Динамически добавляет новые обязанности объектам, действуя как гибкая альтернатива наследованию.

    - <strong>Facade</strong>&#58; Предоставляет унифицированный интерфейс к набору интерфейсов в подсистеме, упрощая её использование.

    - <strong>Flyweight</strong>&#58; Позволяет эффективно поддерживать множество мелких объектов путем совместного использования как можно большего количества данных.

    - <strong>Proxy</strong>&#58; Предоставляет суррогат или заместителя другого объекта для контроля доступа к нему.

1. <strong>Поведенческие (</strong><code>Behavioral Patterns</code><strong>)</strong>&#58;

    - <strong>Observer</strong>&#58; Определяет зависимость типа "один ко многим" между объектами так, что при изменении состояния одного объекта все зависящие от него оповещаются и обновляются автоматически.

    - <strong>Strategy</strong>&#58; Определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми, позволяя изменять алгоритмы независимо от клиентов, которые их используют.

    - <strong>Command</strong>&#58; Инкапсулирует запрос как объект, позволяя параметризовать клиентов с разными запросами, очередями или логами запросов, а также поддерживать отмену операций.

    - <strong>Iterator</strong>&#58; Предоставляет способ последовательного доступа ко всем элементам составного объекта без раскрытия его внутреннего представления.

    - <strong>State</strong>&#58; Позволяет объекту изменять свое поведение в зависимости от его состояния, делая изменения состояния явными.

    - <strong>Chain of Responsibility</strong>&#58; Позволяет передавать запросы по цепочке обработчиков, где каждый обработчик либо обрабатывает запрос, либо передает его следующему обработчику.

    - <strong>Mediator</strong>&#58; Определяет объект, инкапсулирующий способ взаимодействия множества объектов, снижая степень их взаимозависимости.

    - <strong>Memento</strong>&#58; Позволяет сохранять и восстанавливать состояние объекта, не раскрывая его внутренней структуры.

    - <strong>Template Method</strong>&#58; Определяет скелет алгоритма в методе, оставляя некоторые шаги подклассам для реализации.

:::note[Ссылки для изучения]

1. [Паттерны проектирования в Java](https://javarush.com/groups/posts/2267-patternih-proektirovanija-v-java)
   :::
