Паттерны проектирования (Design patterns): различия между версиями
(Новая страница: «{{Понятие |Description=повторяемая архитектурная конструкция в сфере проектирования программного обеспечения, предлагающая решение часто возникающей проблемы |Field_of_knowledge=Информатика |Inventor=Кристофер Вольфганг Александер (Christopher Wolfgang Alexander), Эрих Гамма (Erich Gam...») |
|||
Строка 5: | Строка 5: | ||
|Environment=Книга "Design Patterns: Elements of Reusable Object-Oriented Software" | |Environment=Книга "Design Patterns: Elements of Reusable Object-Oriented Software" | ||
}} | }} | ||
Обычно шаблон не является законченным образцом, который может быть прямо преобразован в код; это лишь пример решения задачи, который можно использовать в различных ситуациях. Объектно-ориентированные шаблоны показывают отношения и взаимодействия между классами или объектами, без определения того, какие конечные классы или объекты приложения будут использоваться. | |||
== Плюсы == | |||
* Снижение сложности разработки | |||
* Упрощение коммуникации между разработчиками | |||
* Унификация | |||
== Минусы == | |||
* Слепое следование может привести к усложнению программы | |||
* Возможное использование без особых оснований | |||
== Основные шаблоны == | |||
Шаблоны проектирования можно разделить на три основные группы | |||
===== Порождающие ===== | |||
Абстрагируют процесс создания. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов | |||
* '''Абстрактная фабрика''' - класс, который представляет собой интерфейс для создания компонентов системы | |||
* '''Строитель''' - класс, который представляет собой интерфейс для создания сложного объекта | |||
* '''Фабричный метод''' - определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс создавать | |||
* '''Прототип''' - определяет интерфейс создания объекта через клонирование другого объекта вместо создания через конструктор | |||
* '''Одиночка''' - класс, который может иметь только один экземпляр | |||
===== Структурные ===== | |||
Определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу | |||
* '''Адаптер''' - объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс | |||
* '''Мост''' - структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо | |||
* '''Компоновщик''' - объект, который объединяет в себе объекты, подобные ему самому | |||
* '''Декоратор''' - класс, расширяющий функциональность другого класса без использования наследования | |||
* '''Фасад''' - объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое | |||
* '''Легковес''' - объект, представляющий себя как уникальный экземпляр в разных местах программы, но фактически не являющийся таковым | |||
* '''Заместитель''' - объект, который является посредником между двумя другими объектами, и который реализует/ограничивает доступ к объекту, к которому обращаются через него | |||
===== Поведенческие ===== | |||
Определяют взаимодействие между объектами, увеличивая таким образом гибкость программы | |||
* '''Цепочка обязанностей''' - предназначен для организации в системе уровней ответственности | |||
* '''Команда''' - представляет действие. Объект команды заключает в себе само действие и его параметры | |||
* '''Интерпретатор''' - решает часто встречающуюся, но подверженную изменениям, задачу | |||
* '''Итератор''' - представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из объектов, входящих в состав агрегации | |||
* '''Посредник''' - обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга | |||
* '''Хранитель''' - позволяет не нарушая инкапсуляцию зафиксировать и сохранить внутренние состояния объекта так, чтобы позднее восстановить его в этих состояниях | |||
* '''Наблюдатель''' - определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии | |||
* '''Состояние''' - используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния | |||
* '''Стратегия''' - предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости | |||
* '''Шаблонный метод''' - определяет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом | |||
* '''Посетитель''' - описывает операцию, которая выполняется над объектами других классов. При изменении класса Visitor нет необходимости изменять обслуживаемые классы |
Версия 23:43, 19 декабря 2024
Описание | повторяемая архитектурная конструкция в сфере проектирования программного обеспечения, предлагающая решение часто возникающей проблемы |
---|---|
Область знаний | Информатика |
Авторы | Кристофер Вольфганг Александер (Christopher Wolfgang Alexander), Эрих Гамма (Erich Gamma), Ричард Хелм (Richard Helm), Ральф Джонсон (Ralph Jonson), Джон Влиссидес (John Vlissides) |
Поясняющее видео | |
Близкие понятия | |
Среды и средства для освоения понятия | Книга "Design Patterns: Elements of Reusable Object-Oriented Software" |
Обычно шаблон не является законченным образцом, который может быть прямо преобразован в код; это лишь пример решения задачи, который можно использовать в различных ситуациях. Объектно-ориентированные шаблоны показывают отношения и взаимодействия между классами или объектами, без определения того, какие конечные классы или объекты приложения будут использоваться.
Плюсы
- Снижение сложности разработки
- Упрощение коммуникации между разработчиками
- Унификация
Минусы
- Слепое следование может привести к усложнению программы
- Возможное использование без особых оснований
Основные шаблоны
Шаблоны проектирования можно разделить на три основные группы
Порождающие
Абстрагируют процесс создания. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов
- Абстрактная фабрика - класс, который представляет собой интерфейс для создания компонентов системы
- Строитель - класс, который представляет собой интерфейс для создания сложного объекта
- Фабричный метод - определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс создавать
- Прототип - определяет интерфейс создания объекта через клонирование другого объекта вместо создания через конструктор
- Одиночка - класс, который может иметь только один экземпляр
Структурные
Определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу
- Адаптер - объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс
- Мост - структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо
- Компоновщик - объект, который объединяет в себе объекты, подобные ему самому
- Декоратор - класс, расширяющий функциональность другого класса без использования наследования
- Фасад - объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое
- Легковес - объект, представляющий себя как уникальный экземпляр в разных местах программы, но фактически не являющийся таковым
- Заместитель - объект, который является посредником между двумя другими объектами, и который реализует/ограничивает доступ к объекту, к которому обращаются через него
Поведенческие
Определяют взаимодействие между объектами, увеличивая таким образом гибкость программы
- Цепочка обязанностей - предназначен для организации в системе уровней ответственности
- Команда - представляет действие. Объект команды заключает в себе само действие и его параметры
- Интерпретатор - решает часто встречающуюся, но подверженную изменениям, задачу
- Итератор - представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из объектов, входящих в состав агрегации
- Посредник - обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга
- Хранитель - позволяет не нарушая инкапсуляцию зафиксировать и сохранить внутренние состояния объекта так, чтобы позднее восстановить его в этих состояниях
- Наблюдатель - определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии
- Состояние - используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния
- Стратегия - предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости
- Шаблонный метод - определяет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом
- Посетитель - описывает операцию, которая выполняется над объектами других классов. При изменении класса Visitor нет необходимости изменять обслуживаемые классы