Файл: уфимский университет науки и технологий факультет математики и информационных технологий кафедра программирования и экономической информатики.docx
Добавлен: 10.11.2023
Просмотров: 656
Скачиваний: 23
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Минусы шаблона "Адаптер":
Плюсы шаблона "Компоновщик":
Минусы шаблона "Компоновщик":
Минусы паттерна "Фасад":
Например, фасад может предоставлять методы, такие как "заказать пиццу", "заказать напиток" и "оформить доставку". Внутри фасада будут выполняться необходимые действия, такие как выбор блюд из меню, обработка заказа, расчет стоимости, обработка платежа и отправка уведомлений о статусе заказа.Таким образом, клиенты системы смогут просто вызвать методы фасада для оформления заказа еды, не требуя знания о том, как работает каждая подсистема. Фасад будет предоставлять простой и интуитивно понятный интерфейс для заказа еды, скрывая сложность и детали внутри системы.
-
Увеличивает сложность кода за счет введения дополнительного уровня косвенности. Адаптер должен выполнять преобразования и перенаправление вызовов, что может усложнить код и ввести дополнительные затраты на производительность. -
Может быть сложно определить, когда использовать адаптер, и какой именно вид адаптера выбрать, особенно в сложных системах. -
Может привести к созданию большого количества мелких адаптеров, что усложняет поддержку кода и увеличивает его объем.
-
Компоновщик (Composite)
Плюсы шаблона "Компоновщик":
-
Упрощает добавление новых типов компонентов в систему, поскольку все компоненты реализуют общий интерфейс. -
Облегчает работу с комплексными структурами, представляющими иерархию объектов. -
Позволяет однородно обрабатывать как отдельные объекты, так и составные объекты. -
Увеличивает гибкость системы, позволяя клиентам работать с составными и отдельными объектами через общий интерфейс.
Минусы шаблона "Компоновщик":
-
Усложняет ограничение и контроль над операциями над объектами в составной структуре. Например, если нужно ограничить доступ к определенным операциям только для отдельных объектов. -
Может быть затратным с точки зрения производительности, особенно если составная структура очень большая и глубоко вложенная.
-
Фасад (Facade)
-
Упрощение использования подсистемы: Фасад предоставляет унифицированный интерфейс, который скрывает сложность и детали внутренней реализации подсистемы. Это позволяет клиентам легко и прозрачно взаимодействовать с системой. -
Снижение зависимостей: Фасад выступает в качестве прослойки между клиентами и подсистемой, уменьшая зависимости между ними. Клиенты взаимодействуют только с фасадом, не имея прямых связей с внутренними компонентами подсистемы. Это упрощает поддержку и развитие системы, поскольку изменения внутри подсистемы не затрагивают клиентский код. -
Улучшение расширяемости: Фасад позволяет легко добавлять новые функциональные возможности в систему без влияния на существующий клиентский код. Модификации внутри фасада не требуют изменения клиентов, поэтому система остается легко расширяемой.
Минусы паттерна "Фасад":
-
Возможное увеличение сложности фасада: Если подсистема имеет сложную структуру или большое количество компонентов, фасад может стать сложным и перегруженным. Фасад должен предоставлять упрощенный интерфейс, поэтому его проектирование и поддержка могут быть нетривиальными задачами. -
Ограниченность гибкости: Фасад может быть ограниченным в отношении возможностей, которые подсистема предлагает. Фасад скрывает детали внутренней реализации, поэтому клиенты имеют доступ только к предоставленным фасадом функциям и операциям. Если клиентам требуется более гибкое и тонкое управление или настройка подсистемы, они могут столкнуться с ограничениями фасада. -
Ограниченность контроля: Фасад скрывает детали внутренней реализации подсистемы, что означает, что клиенты теряют прямой контроль над этими деталями. Если клиентам требуется точная настройка и манипуляция с каждым компонентом подсистемы, фасад может ограничивать их возможности. -
Усложнение обслуживания: Если фасад не соответствует потребностям клиентов или требует изменений, это может повлечь за собой изменения внутри подсистемы или фасада. Если фасад не правильно абстрагирует подсистему или его интерфейс не является удобным для клиентов, его поддержка и обслуживание могут стать сложными. -
Возможное увеличение связности: Фасад может привести к увеличению связности между компонентами подсистемы, особенно если фасад не является хорошо спроектированным или превышает свою ответственность. Это может привести к трудностям при изменении или модификации компонентов подсистемы, так как изменения могут требовать изменений в фасаде и других компонентах. -
Потеря производительности: Использование фасада может привести к незначительной потере производительности из-за дополнительных слоев абстракции и вызовов. Однако, в большинстве случаев эта потеря незначительна и не является критичной.
Например, фасад может предоставлять методы, такие как "заказать пиццу", "заказать напиток" и "оформить доставку". Внутри фасада будут выполняться необходимые действия, такие как выбор блюд из меню, обработка заказа, расчет стоимости, обработка платежа и отправка уведомлений о статусе заказа.Таким образом, клиенты системы смогут просто вызвать методы фасада для оформления заказа еды, не требуя знания о том, как работает каждая подсистема. Фасад будет предоставлять простой и интуитивно понятный интерфейс для заказа еды, скрывая сложность и детали внутри системы.
-
Приспособленец (Flyweight)
-
Экономия памяти: Паттерн позволяет сократить использование памяти путем разделения общих данных между множеством объектов. Вместо создания отдельного объекта для каждого экземпляра, приспособленцы используются для представления общих данных, что приводит к снижению потребления памяти. -
Улучшение производительности: Поскольку приспособленцы разделяют общие данные, это может привести к улучшению производительности системы. Множество объектов может совместно использовать одни и те же данные, что уменьшает накладные расходы на создание и управление объектами. -
Гибкость: Паттерн "Приспособленец" позволяет добавлять новые вариации объектов без значительных изменений в коде. Каждый объект может быть настроен для представления различных свойств, а общие данные могут быть легко обновлены без воздействия на существующие объекты.
-
Дополнительные сложности: Реализация приспособленца может потребовать дополнительных усилий и усложнить код. Необходимо разделить объекты на внутреннее и внешнее состояние, а также управлять доступом к общей информации. -
Потеря в производительности: При использовании приспособленца возникают дополнительные затраты на хранение и обработку общей информации. В случае, когда объекты имеют большой объем информации, затраты на управление и передачу этой информации между объектами могут снизить производительность системы. -
Ограничение изменений: Если общая информация, используемая приспособленцами, изменяется, то это может повлиять на все объекты, разделяющие эту информацию. Изменение общей информации может быть сложным и потребовать внесения изменений во все приспособленцы. -
Проблемы с многопоточностью: При использовании приспособленца в многопоточной среде может возникнуть необходимость в синхронизации доступа к общей информации. Это может повлечь за собой дополнительные проблемы с производительностью и сложности кода.