Сравнительный анализ различных архитектурных стилей
Заказать уникальный реферат- 47 47 страниц
- 8 + 8 источников
- Добавлена 04.06.2024
- Содержание
- Часть работы
- Список литературы
1. Базовые шаблоны проектирования 6
1.1 Что такое GoF и GRASP 6
1.2 Классификация шаблонов проектирования 6
1.3 Делегирование (Delegation) 7
1.4 Заместитель (Proxy) 8
2. Структурные шаблоны 11
2.1 Адаптер (Adapter) 11
2.2 Декоратор объектов или Обертка (Decorator или Wrapper) 12
2.3 Мост (Bridge) 14
2.4 Компоновщик (Composite) 16
2.5 Приспособленец (Flyweight) 18
2.6 Итератор (Iterator) 20
2.7 Информационный эксперт (Information Expert) 21
3. Порождающие шаблоны 24
3.1 Фабричный метод (Factory method) 24
3.2 Абстрактная фабрика (Abstract factory) 26
3.3 Прототип (Prototype) 27
3.4 Строитель (Builder) 29
3.5 Одиночка (Singleton) 31
3.6 Пул объектов (Object Pool) 32
4. Поведенческие шаблоны 34
4.1 Наблюдатель (Observer) 34
4.2 Хранитель (Memento) 36
4.3 Команда (Command) 37
4.4 Посредник(Mediator) 39
4.5 Интерпретатор (Interpreter) 41
4.6 Контроллер (Controller) 43
Заключение 45
Список использованной литературы 47
Таким образом, у объектов-наблюдателей есть возможность реагировать на изменения состояния объектов-субъектов и синхронизировать свое состояние с ними.Структура:Субъект (Subject): это объект, который содержит некоторое состояние и список зависимых от него наблюдателей. Он предоставляет методы для добавления, удаления и оповещения наблюдателей об изменениях своего состояния.Наблюдатель (Observer): это интерфейс или абстрактный класс, который определяет метод обновления, вызываемый субъектом при изменении его состояния.Конкретный наблюдатель (ConcreteObserver): это класс, который реализует метод обновления и подписывается на оповещения от субъекта.Реализация:Когда состояние субъекта меняется, он оповещает всех своих наблюдателей, вызывая их методы обновления.Наблюдатели получают оповещение и выполняют необходимые действия в соответствии с изменениями состояния субъекта.Субъект предоставляет методы для добавления и удаления наблюдателей из списка зависимостей.Пример использования:В графических интерфейсах шаблон "Наблюдатель" часто используется для обновления элементов пользовательского интерфейса при изменении модели данных.В реальном времени приложения (например, чаты или системы уведомлений) шаблон "Наблюдатель" может использоваться для оповещения пользователей о появлении новых сообщений или событий.Преимущества:Уменьшает зависимость между объектами, так как субъект не зависит от конкретных классов наблюдателей, и наоборот.Обеспечивает гибкость и расширяемость кода, позволяя добавлять и удалять наблюдателей без изменения субъекта.Позволяет реализовать распределенные системы, где изменения одного объекта должны быть отражены в других объектах.Недостатки:Может привести к утечкам памяти, если объекты-наблюдатели не удаляются из списка зависимостей субъекта после своего уничтожения.Может привести к ненужным обновлениям, если субъект часто меняет свое состояние, что приводит к вызовам методов обновления у наблюдателей.Шаблон "Наблюдатель" позволяет создавать слабо связанные системы, где объекты могут обмениваться информацией о своем состоянии без знания друг о друге. Это делает его очень полезным в архитектуре программного обеспечения, где требуется реализация модели-подписчика или издатель-подписчика.4.2 Хранитель (Memento)Шаблон "Хранитель" (Memento) - это поведенческий шаблон проектирования, который используется для сохранения внутреннего состояния объекта так, чтобы оно можно было восстановить позже без нарушения инкапсуляции. Он позволяет объекту сохранять свое текущее состояние в виде снимка (memento) и восстанавливать его в будущем.Вот более подробное объяснение шаблона "Хранитель":Структура:Хранитель (Memento): это объект, который хранит внутреннее состояние снимка (memento) объекта. Он обычно имеет методы для получения и установки состояния снимка.Создатель (Originator): это объект, состояние которого должно быть сохранено и восстановлено. Он создает снимки своего состояния и использует их для восстановления состояния в будущем.Опекун (Caretaker): это объект, который отвечает за сохранение и восстановление состояния создателя. Он хранит снимки состояния и предоставляет интерфейс для их управления.Реализация:Создатель создает снимок своего текущего состояния, вызывая метод создания снимка.Снимок, содержащий текущее состояние создателя, передается опекуну для сохранения.В будущем, когда создателю нужно восстановить свое состояние, опекун предоставляет соответствующий снимок, и создатель восстанавливает свое состояние из него.Пример использования:В текстовом редакторе шаблон "Хранитель" может использоваться для сохранения и восстановления состояния документа, включая его содержимое, форматирование и положение курсора.В игровых приложениях шаблон "Хранитель" может использоваться для сохранения и восстановления состояния игрового уровня, включая положение игрока, количество жизней и прогресс.Преимущества:Позволяет объекту сохранять свое состояние без нарушения инкапсуляции.Упрощает реализацию функциональности отмены и возврата к предыдущим состояниям.Обеспечивает гибкость и расширяемость, так как позволяет сохранять и восстанавливать состояние объекта в любой момент времени.Недостатки:Может привести к увеличению использования памяти и процессорного времени, особенно если объект имеет большое количество состояний для сохранения.Требует осторожного управления доступом к состоянию объекта, чтобы избежать утечек памяти или некорректного восстановления состояния.Шаблон "Хранитель" полезен в ситуациях, когда требуется сохранить состояние объекта так, чтобы его можно было восстановить позже без нарушения инкапсуляции. Он позволяет реализовать функциональность сохранения и восстановления состояния объекта и может быть использован в различных областях, таких как приложения пользовательского интерфейса, игровые движки и системы управления [7].4.3 Команда (Command)Шаблон "Команда" (Command) - это поведенческий шаблон проектирования, который превращает запросы или операции в объекты, позволяя отложить выполнение операций, параметризовать запросы и поддерживать отмену операций. Он инкапсулирует запрос как объект, что позволяет клиентам параметризовать клиентов с различными запросами, очередями или отменять их.Вот более подробное объяснение шаблона "Команда":Структура:Команда (Command): это интерфейс или абстрактный класс, который определяет метод выполнения операции.Конкретная команда (ConcreteCommand): это класс, который реализует метод выполнения операции, вызывая соответствующие методы получателя (receiver).Получатель (Receiver): это объект, который знает, как выполнять операции, связанные с конкретной командой.Отправитель (Invoker): это объект, который передает команды получателю для выполнения. Он также может поддерживать очередь команд или историю выполненных команд.Клиент (Client): это объект, который создает команды и передает их отправителю для выполнения.Реализация:Каждая команда инкапсулирует операцию и ее параметры в объекте.Клиент создает команды, указывая какую операцию выполнить и для какого получателя.Отправитель получает команду от клиента и передает ее получателю для выполнения.Получатель выполняет операцию, вызывая соответствующие методы.Отправитель также может поддерживать возможность отмены операций, храня историю выполненных команд.Пример использования:В текстовых редакторах шаблон "Команда" может использоваться для реализации функциональности отмены и возврата (Ctrl+Z, Ctrl+Y).В играх шаблон "Команда" может использоваться для реализации управления действиями игрока (например, перемещение, стрельба и т. д.).Преимущества:Разделение запроса от его выполнения позволяет легко расширять функциональность и добавлять новые команды без изменения клиентского кода.Поддержка отмены операций (Undo) становится более простой, так как команды могут хранить историю выполненных операций.Недостатки:Может увеличить количество классов в системе из-за введения дополнительных классов для каждой команды.Может усложнить отладку и поддержку из-за введения дополнительных абстракций и взаимодействий между ними.Шаблон "Команда" полезен в ситуациях, когда требуется разделить запрос от его выполнения или поддержать функциональность отмены операций. Он позволяет легко добавлять новые команды и поддерживать гибкость и расширяемость кода.4.4 Посредник(Mediator)Шаблон "Посредник" (Mediator) - это поведенческий шаблон проектирования, который позволяет уменьшить связанность между компонентами системы, обеспечивая их взаимодействие через один объект-посредник. Он снижает непосредственные связи между объектами, управляя их взаимодействием, что делает систему более гибкой и легкой для модификации.Структура:Посредник (Mediator): это объект, который управляет взаимодействием между компонентами системы. Он содержит ссылки на все компоненты и определяет методы для их взаимодействия.Компоненты (Colleague): это объекты, которые содержат логику и состояние, но не должны напрямую взаимодействовать друг с другом. Вместо этого они общаются через посредника.Реализация:Каждый компонент регистрируется в посреднике при создании.Когда компоненту требуется взаимодействовать с другими компонентами, он вызывает соответствующий метод посредника.Посредник реализует логику взаимодействия между компонентами и вызывает нужные методы у других компонентов.Пример использования:В GUI-приложениях посредник может использоваться для управления взаимодействием между различными элементами интерфейса, такими как кнопки, поля ввода и окна.В многопользовательских приложениях посредник может использоваться для управления обменом сообщениями между пользователями.Преимущества:Уменьшает связанность между компонентами системы, что упрощает ее модификацию и сопровождение.Повышает повторное использование компонентов, так как их логика не привязана к конкретным компонентам.Обеспечивает централизованное управление взаимодействием между компонентами, что делает систему более структурированной и легкой для понимания.Недостатки:Может привести к увеличению сложности посредника из-за необходимости обрабатывать все возможные комбинации взаимодействий между компонентами.Может сделать систему менее производительной из-за централизованного управления взаимодействием.Шаблон "Посредник" особенно полезен в ситуациях, где существует большое количество взаимосвязанных компонентов, которые должны взаимодействовать друг с другом. Он позволяет уменьшить связанность и улучшить модульность системы, делая ее более гибкой и легкой для изменения.4.5 Интерпретатор (Interpreter)Шаблон "Интерпретатор" (Interpreter) - это поведенческий шаблон проектирования, который используется для интерпретации и выполнения грамматических правил или инструкций, заданных в виде предложений на некотором языке. Он предоставляет способ интерпретации узлов дерева синтаксического разбора (абстрактного синтаксического дерева), представляющих конструкции языка программирования или предметно-ориентированного языка.Структура:Интерфейс выражения (Expression): определяет метод interpret(), который выполняет интерпретацию выражения.Терминальное выражение (TerminalExpression): реализует интерфейс выражения и представляет терминальные узлы дерева синтаксического разбора. Эти выражения не содержат других выражений.Нетерминальное выражение (Non-TerminalExpression): реализует интерфейс выражения и представляет нетерминальные узлы дерева синтаксического разбора. Они содержат другие выражения как подвыражения.Контекст (Context): содержит информацию, необходимую для интерпретации выражений.Клиент (Client): создает и конфигурирует объекты выражений, представляющие предложения для интерпретации.Реализация:Клиент создает объекты выражений, представляющие конструкции языка, и конфигурирует их в виде дерева синтаксического разбора.Когда нужно выполнить интерпретацию предложения, клиент передает корневой узел дерева синтаксического разбора контексту для интерпретации.Контекст передает управление корневому выражению, которое начинает рекурсивно интерпретировать свои подвыражения.Пример использования:В компиляторах шаблон "Интерпретатор" может использоваться для выполнения синтаксического анализа и интерпретации исходного кода на высокоуровневых языках программирования.В языках запросов к базам данных шаблон "Интерпретатор" может использоваться для интерпретации выражений запросов и выполнения их против базы данных.Преимущества:Упрощает добавление новых операций или функциональности в систему, так как новые выражения могут быть добавлены путем создания новых классов выражений.Позволяет представлять грамматику языка в виде объектов, что делает ее более легкой для понимания и модификации.Недостатки:Может привести к увеличению сложности иерархии классов из-за создания множества классов выражений для различных конструкций языка.Шаблон "Интерпретатор" полезен в ситуациях, когда нужно интерпретировать и выполнить грамматические конструкции или инструкции на некотором языке, представленном в виде предложений. Он позволяет представлять грамматику языка в виде объектов, что делает ее более легкой для анализа и выполнения.4.6 Контроллер (Controller)Контроллер (Controller) - это паттерн проектирования, который используется в структуре приложения с архитектурой MVC (Model-View-Controller), где он отвечает за обработку входящих запросов от пользователей, взаимодействие с моделью данных и передачу данных в представление для отображения.Вот более подробное объяснение:Структура:Модель (Model): отвечает за представление данных и бизнес-логики приложения.Представление (View): отвечает за отображение данных пользователю.Контроллер (Controller): отвечает за обработку входящих запросов от пользователей, взаимодействие с моделью данных и передачу данных в представление.Реализация:Когда пользователь взаимодействует с интерфейсом приложения, например, отправляет форму или кликает на ссылку, это генерирует запрос, который отправляется на сервер.Контроллер, находясь на сервере, получает этот запрос и анализирует его, чтобы определить, какому действию он соответствует.После определения действия, контроллер может взаимодействовать с моделью данных для выполнения нужных операций, таких как получение, обновление или удаление данных.После завершения операций с данными контроллер передает необходимую информацию представлению для отображения результатов пользователю.Пример использования:В веб-приложениях контроллер может обрабатывать запросы от пользователей и управлять действиями, такими как регистрация, аутентификация, отправка данных формы и другие.В приложениях с графическим интерфейсом контроллер может обрабатывать действия пользователя, такие как нажатия кнопок, выбор элементов меню и другие.Преимущества:Разделение обязанностей: контроллер отвечает исключительно за обработку запросов и взаимодействие с моделью, что улучшает разделение обязанностей в приложении.Гибкость: благодаря структуре MVC, приложение становится более гибким и легким для модификации и расширения.Недостатки:В некоторых случаях контроллер может стать слишком сложным, если в приложении слишком много различных типов запросов и действий, что может привести к усложнению его тестирования и поддержки.Контроллер - это ключевой элемент архитектуры MVC, который обеспечивает связь между пользовательским интерфейсом и бизнес-логикой приложения, делая его более структурированным, гибким и легким для понимания и разработки [8].ЗаключениеВ ходе выполнения данного исследования были достигнуты все поставленные задачи:Были изучены основные категории шаблонов проектирования, включая базовые, порождающие, структурные и поведенческие шаблоны.Проведен анализ принципов работы и особенностей применения каждой категории шаблонов, позволивший понять, какие задачи они решают и как они взаимодействуют друг с другом.Рассмотрены практические примеры применения шаблонов проектирования в различных областях разработки программного обеспечения, что позволило увидеть их реальное применение и пользу.Выявлены преимущества и недостатки использования шаблонов проектирования, что позволило сделать выводы о том, в каких ситуациях их применение наиболее оправдано.Проведем сравнение стилей:КатегорияОписаниеСравнение между стилямиБазовые шаблоны проектированияОпределяют основные концепции и архитектурные принципы, на которых строится проектирование системы.Основные шаблоны являются базовыми строительными блоками для проектирования систем, в то время как остальные категории предоставляют более конкретные шаблоны для определенных задач.Порождающие шаблоныИспользуются для создания объектов и структур системы, обеспечивая гибкость и управление процессом создания объектов.Порождающие шаблоны акцентируют внимание на создании и конфигурировании объектов, тогда как остальные категории шаблонов сосредотачиваются на их организации и взаимодействии.Структурные шаблоныОпределяют способы компоновки объектов и классов в более крупные структуры, обеспечивая эффективное управление отношениями между ними.Структурные шаблоны направлены на улучшение архитектуры системы путем оптимизации взаимодействия между объектами и уменьшения связности.Поведенческие шаблоныОпределяют способы организации взаимодействия и обмена данными между объектами, управления потоком управления и коммуникации в системе.Поведенческие шаблоны обеспечивают эффективное управление поведением объектов и их взаимодействием в рамках системы.Таким образом, все поставленные цели и задачи были успешно выполнены, и исследование позволило получить глубокое понимание шаблонов проектирования и их роли в разработке программного обеспечения.Список использованной литературыГамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. — СПб: Питер, 2015.Вайсфельд, Мэтт Объектно-ориентированное мышление / Мэтт Вайсфельд. - М.: Питер, 2023. - 371 c.Э.Фримен, К.Сьерра, Б.Бейтс. Паттерны проектирования — СПб: Питер, 2011.Комлев, Николай Юрьевич Объектно Ориентированное Программирование. Хорошая книга для Хороших Людей / Комлев Николай Юрьевич. - М.: Солон-Пресс, 2021. - 138 c.Р. Мартин. Чистый код. Создание, анализ и рефакторинг — СПб: Питер, 2010.О. Дубина. Обзор паттернов проектирования [Электронный ресурс]. – Режим доступа: www. URL: http://citforum.ru/SE/project/pattern/Йордон, Эдвард Объектно-ориентированный анализ и проектирование систем / Эдвард Йордон , Карл Аргила. - М.: ЛОРИ, 2022. - 264 c.Craig Larman. Applyin Craig Larman g UML and Patterns: An Introduction to ObjectOriented Analysis and Design and Iterative Development (3rd Edition) Hardcover – October 30, 2004.
2. Вайсфельд, Мэтт Объектно-ориентированное мышление / Мэтт Вайсфельд. - М.: Питер, 2023. - 371 c.
3. Э.Фримен, К.Сьерра, Б.Бейтс. Паттерны проектирования — СПб: Питер, 2011.
4. Комлев, Николай Юрьевич Объектно Ориентированное Программирование. Хорошая книга для Хороших Людей / Комлев Николай Юрьевич. - М.: Солон-Пресс, 2021. - 138 c.
5. Р. Мартин. Чистый код. Создание, анализ и рефакторинг — СПб: Питер, 2010.
6. О. Дубина. Обзор паттернов проектирования [Электронный ресурс]. – Режим доступа: www. URL: http://citforum.ru/SE/project/pattern/
7. Йордон, Эдвард Объектно-ориентированный анализ и проектирование систем / Эдвард Йордон , Карл Аргила. - М.: ЛОРИ, 2022. - 264 c.
8. Craig Larman. Applyin Craig Larman g UML and Patterns: An Introduction to ObjectOriented Analysis and Design and Iterative Development (3rd Edition) Hardcover – October 30, 2004.