Основные понятия
Что такое «шаблон проектирования»?
«Шаблон проектирования» (design pattern) — это повторяемое решение общей проблемы проектирования программного обеспечения. Шаблоны проектирования предоставляют проверенные практики и структуры, которые помогают разработчикам создавать гибкие и поддерживаемые системы. Они не являются конкретным кодом, а скорее описанием способов организации кода для решения типичных задач. Шаблоны проектирования делятся на три основные категории:
-
Порождающие (
Creational Patterns): касаются способов создания объектов, обеспечивая гибкость и повторное использование кода. Примеры: Singleton, Factory Method, Abstract Factory. -
Структурные (
Structural Patterns): касаются организации классов и объектов для создания новых функциональностей. Примеры: Adapter, Composite, Decorator. -
Поведенческие (
Behavioral Patterns): касаются взаимодействия между объектами и распределения обязанностей. Примеры: Observer, Strategy, Command.
Шаблоны проектирования помогают улучшить архитектуру и качество кода, делая его более понятным и легким в сопровождении.
Назовите основные характеристики шаблонов
Основные характеристики шаблонов проектирования включают:
-
Повторяемость: Решения, предоставляемые шаблонами, могут быть многократно использованы в различных проектах и ситуациях.
-
Абстракция: Шаблоны описывают концептуальные решения, которые можно реализовать разными способами в зависимости от контекста.
-
Документированность: Шаблоны подробно описаны, включая проблему, контекст, решение и последствия использования.
-
Гибкость: Шаблоны предлагают гибкие решения, которые можно адаптировать под конкретные нужды проекта.
-
Независимость от языка программирования: Шаблоны описывают общие концепции и могут быть реализованы на любом языке программирования.
-
Улучшение архитектуры: Использование шаблонов помогает создавать более структурированные, понятные и поддерживаемые системы.
Какие бывают типы шаблонов проектирования?
Типы шаблонов проектирования делятся на три основные категории:
-
Порождающие (
Creational Patterns):-
Singleton: Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа.
-
Factory Method: Определяет интерфейс для создания объекта, но позволяет подклассам изменять тип создаваемого объекта.
-
Abstract Factory: Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов без указания их конкретных классов.
-
Builder: Отделяет построение сложного объекта от его представления, так что один и тот же процесс построения может создавать разные представления.
-
Prototype: Создает новые объекты путем копирования существующего объекта-прототипа.
-
-
Структурные (
Structural Patterns):-
Adapter: Преобразует интерфейс класса в интерфейс, ожидаемый клиентом, позволяя работать с несовместимыми интерфейсами.
-
Composite: Составляет объекты в древовидные структуры для представления иерархий часть-целое, позволяя клиентам работать с отдельными объектами и их комбинациями единообразно.
-
Decorator: Динамически добавляет новые обязанности объектам, действуя как гибкая альтернатива наследованию.
-
Facade: Предоставляет унифицированный интерфейс к набору интерфейсов в подсистеме, упрощая её использование.
-
Flyweight: Позволяет эффективно поддерживать множество мелких объектов путем совместного использования как можно большего количества данных.
-
Proxy: Предоставляет суррогат или заместителя другого объекта для контроля доступа к нему.
-
-
Поведенческие (
Behavioral Patterns):-
Observer: Определяет зависимость типа “один ко многим” между объектами так, что при изменении состояния одного объекта все зависящие от него оповещаются и обновляются автоматически.
-
Strategy: Определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми, позволяя изменять алгоритмы независимо от клиентов, которые их используют.
-
Command: Инкапсулирует запрос как объект, позволяя параметризовать клиентов с разными запросами, очередями или логами запросов, а также поддерживать отмену операций.
-
Iterator: Предоставляет способ последовательного доступа ко всем элементам составного объекта без раскрытия его внутреннего представления.
-
State: Позволяет объекту изменять свое поведение в зависимости от его состояния, делая изменения состояния явными.
-
Chain of Responsibility: Позволяет передавать запросы по цепочке обработчиков, где каждый обработчик либо обрабатывает запрос, либо передает его следующему обработчику.
-
Mediator: Определяет объект, инкапсулирующий способ взаимодействия множества объектов, снижая степень их взаимозависимости.
-
Memento: Позволяет сохранять и восстанавливать состояние объекта, не раскрывая его внутренней структуры.
-
Template Method: Определяет скелет алгоритма в методе, оставляя некоторые шаги подклассам для реализации.
-