Патерн фасад
Характеристика структурного шаблона проектирования, позволяющего скрыть сложность системы путем сведения всех возможных внешних вызовов к одному объекту, делегирующему их соответствующим объектам системы. Предоставление унифицированного интерфейса.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 09.01.2015 |
Размер файла | 476,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Шаблон фасад (англ. Facade) -- структурный шаблон проектирования, позволяющий скрыть сложность системы путем сведения всех возможных внешних вызовов к одному объекту, делегирующему их соответствующим объектам системы.
Фасад - паттерн, структурирующий объекты, предоставляя ко всем ним доступ через единый шлюз.
Назначение паттерна Facade
-Паттерн Facade предоставляет унифицированный интерфейс вместо набора интерфейсов некоторой подсистемы. Facade определяет интерфейс более высокого уровня, упрощающий использование подсистемы.
- Паттерн Facade "обертывает" сложную подсистему более простым интерфейсом. проектирование шаблон унифицированный интерфейс
"Разбиение на подсистемы облегчает проектирование сложной системы в целом. Общая цель всякого проектирования - свести к минимуму зависимость подсистем друг от друга, а также обмен информацией между ними. Один из способов решения этой задачи - введение общего объекта фасад, предоставляющий единый упрощенный интерфейс к более сложным системным средствам. Можно также сказать, что тем самым мы более приближаемся к построению системы по принципу «черного ящика»: единый интерфейс целой большой системы начинает выступать как интерфейс «черного ящика» и мы не должны знать, как он устроен, какие внутри него взаимосвязи других объектов, сколько их вообще и т.д. Мы просто используем его в соответствии с его интерфейсом, задавая на вход определенные данные и получая соответствующие результаты. " Клиенты хотят получить упрощенный интерфейс к общей функциональности сложной подсистемы.
Вопрос как обеспечить унифицированный интерфейс с набором разрозненных реализаций или интерфейсов, например, с подсистемой, если нежелательно высокое связывание с этой подсистемой или реализация подсистемы может измениться?
Это решается следующим образом
Определяется одна точка взаимодействия с подсистемой -- фасадный объект, обеспечивающий общий интерфейс с подсистемой, и возложить на него обязанность по взаимодействию с её компонентами. Фасад -- это внешний объект, обеспечивающий единственную точку входа для служб подсистемы. Реализация других компонентов подсистемы закрыта и не видна внешним компонентам. Фасадный объект обеспечивает реализацию GRASP паттерна Устойчивый к изменениям (Protected Variations) с точки зрения защиты от изменений в реализации подсистемы.
Используется паттерн фасад
1. Когда хотят предоставить простой интерфейс к сложной подсистеме.
Часто подсистемы усложняются по мере развития. Применение большинства паттернов приводит к появлению меньших классов, но в большем количестве. Такую подсистему проще повторно использовать и настраивать под конкретные нужды, но вместе с тем применять подсистему без настройки становится труднее. Фасад предлагает некоторый вид системы по умолчанию, устраивающий большинство клиентов. И лишь те объекты, которым нужны более широкие возможности настройки, могут обратиться напрямую к тому, что находится за фасадом
2. Когда между клиентами и классами реализации абстракции существует много зависимостей.
Фасад позволит изолировать подсистему как от клиентов, так и от других подсистем, что, в свою очередь, способствует повышению степени независимости и переносимости;
И когда хотят разложить подсистему на отдельные слои: расслоить.
Используют фасад для определения точки входа на каждый уровень подсистемы. Если подсистемы зависят друг от друга, то зависимость можно упростить, разрешив подсистемам обмениваться информацией только через фасады.
Структура паттерна Facade
Клиенты общаются с подсистемой через Facade. При получении запроса от клиента объект Facade переадресует его нужному компоненту подсистемы. Для клиентов компоненты подсистемы остаются "тайной, покрытой мраком".
UML-диаграмма классов паттерна Facade
Подсистемы SubsystemOne и SubsystemThree не взаимодействуют напрямую с внутренними компонентами подсистемы SubsystemTwo. Они используют "фасад" SubsystemTwoWrapper (т.е. абстракцию более высокого уровня).
Участниками паттерна Фасад (Facade) являются
1.Facade (Compiler) - фасад.
Осведомлен о том, каким классам подсистемы адресовать запрос.
Делегирует запросы клиентов подходящим объектам внутри подсистемы
2.Классы подсистемы (Scanner, Parser, ProgramNode и т.д.).
Реализуют функциональность подсистемы.
Выполняют работу, запрошенную объектом Facade, которую в свою очередь запросил у Facade-а один из клиентов.
Ничего не «знают» о существовании самого фасада, то есть не хранят ссылок на него.
Схема использования паттерна Фасад (Facade)
Клиенты общаются с подсистемой, посылая запросы фасаду. Он переадресует их подходящим объектам внутри подсистемы. Хотя основную работу выполняют именно объекты подсистемы, фасаду, возможно, придется преобразовать свой интерфейс в интерфейсы подсистемы.
Клиенты, пользующиеся фасадом, не имеют прямого доступа к объектам подсистемы
Вопросы, касающиеся реализации паттерна Фасад (Facade)
При реализации фасада следует обратить внимание на следующие вопросы: Уменьшение степени связанности клиента с подсистемой.
Степень связанности можно значительно уменьшить, если сделать класс Facade абстрактным. Его конкретные подклассы будут соответствовать различным реализациям подсистемы. Тогда клиенты смогут взаимодействовать с подсистемой через интерфейс абстрактного класса Facade. Это изолирует клиентов от информации о том, какая реализация подсистемы используется.
Вместо порождения подклассов можно просто конфигурировать объект Facade различными объектами подсистем - передавать ему на начальном этапе (создании) соответствующие объекты. Для настройки фасада достаточно будет заменить потом один или несколько таких объектов, группу взаимосвязанных объектов и т.д.
Открытые и закрытые классы подсистем.
Подсистема похожа на класс в том отношении, что у обоих есть интерфейсы и оба что-то инкапсулируют. Класс - инкапсулирует состояние и операции, а подсистема - классы. И если полезно различать открытый и закрытый интерфейсы класса, то не менее разумно говорить об открытом и закрытом интерфейсах подсистемы.
Открытый интерфейс подсистемы состоит из классов, к которым имеют доступ все клиенты; закрытый же интерфейс доступен только для расширения подсистемы. Класс Facade, конечно же, является частью открытого интерфейса, но это не единственная часть. Другие классы подсистемы также могут быть открытыми. Например, в системе компиляции классы Parser и Scanner - часть открытого интерфейса.
Делать классы подсистемы закрытыми иногда полезно, но это поддерживается немногими объектно-ориентированными языками. Например, и в C++, и в Smalltalk для классов традиционно использовалось глобальное пространство имен. Однако комитет по стандартизации C++ добавил к языку пространства имен, и это позволило разрешать доступ только к открытым классам подсистемы.
У паттерна фасад есть следующие преимущества и недостатки:
1.Изолирует клиентов от компонентов подсистемы
Уменьшая тем самым число объектов, с которыми клиентам приходится иметь дело, упрощая работу с подсистемой.
2.Позволяет ослабить связанность между подсистемой и ее клиентами.
Зачастую компоненты подсистемы сильно связаны: многие классы из разных частей и слоев системы взаимодействуют с друг другом, меняя один такой класс, приходится перекомпилировать и остальные связанные и т.д. Слабая связанность позволяет видоизменять компоненты, не затрагивая при этом клиентов. Фасады помогают разложить систему на слои и структурировать зависимости между объектами, а также избежать сложных и циклических зависимостей. Это оказывается важным, если клиент и подсистема реализуются независимо.
Уменьшение числа зависимостей на стадии компиляции чрезвычайно важно в больших системах. Хочется, конечно, чтобы время, уходящее на перекомпиляцию после изменения классов подсистемы, было минимальным. Сокращение числа зависимостей за счет фасадов может уменьшить количество нуждающихся в повторной компиляции файлов после небольшой модификации какой-нибудь важной подсистемы. Фасад может также упростить процесс переноса системы на другие платформы, поскольку уменьшается вероятность того, что в результате изменения одной подсистемы понадобится изменять и все остальные
3.Фасад не исключает возможности приложениям напрямую обращаться к классам подсистемы, если это необходимо.
Таким образом, у вас есть выбор между простотой и общностью. Совет конечно очевидный: как можно только в крайних случаях прибегайте к прямому взаимодействию с классом за фасадом, лучше если возможно все же как-нибудь обобщить/абстрагировать эту операцию и добавить ее в сам фасад.
4. С другой стороны, если фасад является единственной точкой доступа к подсистеме, то он будет ограничивать возможности, которые могут понадобиться "продвинутым" пользователям.
5.Объект Facade, реализующий функции посредника, должен оставаться довольно простым и не быть всезнающим "оракулом".
Пример паттерна Facade
Паттерн Facade определяет унифицированный высокоуровневый интерфейс к подсистеме, что упрощает ее использование. Покупатели сталкиваются с фасадом при заказе каталожных товаров по телефону. Покупатель звонит в службу поддержки клиентов и перечисляет товары, которые хочет приобрести. Представитель службы выступает в качестве "фасада", обеспечивая интерфейс к отделу исполнения заказов, отделу продаж и службе доставки.
.
При использовании паттерна Facade необходимо
Определить для подсистемы простой, унифицированный интерфейс.
Спроектировать класс "обертку", инкапсулирующий подсистему.
Вся сложность подсистемы и взаимодействие ее компонентов скрыты от клиентов. "Фасад" / "обертка" переадресует пользовательские запросы подходящим методам подсистемы.
Клиент использует только "фасад".
Рассмотрить вопрос о целесообразности создания дополнительных "фасадов".
Особенности паттерна Facade
Facade определяет новый интерфейс, в то время как Adapter использует уже имеющийся. Помните, Adapter делает работающими вместе два существующих интерфейса, не создавая новых.
Если Flyweight показывает, как сделать множество небольших объектов, то Facade показывает, как сделать один объект, представляющий целую подсистему.
Mediator похож на Facade тем, что абстрагирует функциональность существующих классов. Однако Mediator централизует функциональность между объектами-коллегами, не присущую ни одному из них. Коллеги обмениваются информацией друг с другом через Mediator. С другой стороны, Facade определяет простой интерфейс к подсистеме, не добавляет новой функциональности и не известен классам подсистемы.
Abstract Factory может применяться как альтернатива Facade для сокрытия платформенно-зависимых классов.
Объекты "фасадов" часто являются Singleton, потому что требуется только один объект Facade.
Adapter и Facade в являются "обертками", однако эти "обертки" разных типов. Цель Facade - создание более простого интерфейса, цель Adapter - адаптация существующего интерфейса. Facade обычно "обертывает" несколько объектов, Adapter "обертывает" один объект.
Пример использования
Разбиение системы на компоненты позволяет снизить ее сложность. Ослабить связи между компонентами системы можно с помощью паттерна Facade. Объект "фасад" предоставляет единый упрощенный интерфейс к компонентам системы.
В примере ниже моделируется система сетевого обслуживания. Фасад FacilitiesFacade скрывает внутреннюю структуру системы. Пользователь, сделав однажды запрос на обслуживание, затем 1-2 раза в неделю в течение 5 месяцев справляется о ходе выполнения работ до тех пор, пока его запрос не будет полностью обслужен.
Размещено на Allbest.ru
...Подобные документы
Факты появления двоичной системы счисления - позиционной системы счисления с основанием 2. Достоинства системы: простота вычислений и организации чисел, возможность сведения всех арифметических действий к одному - сложению. Применение двоичной системы.
презентация [1,5 M], добавлен 10.12.2014Описание структурного шаблона с именем ZNAK, содержащего элементы NAME, ZODIAC, BDAY. Операции со структурами в языке Си. Подключение графической библиотеки программы. Указатель как переменная, содержащая адрес некоторого объекта в памяти компьютера.
контрольная работа [342,9 K], добавлен 10.01.2012Анализ существующих систем автоматизации документооборота. Выбор шаблона проектирования. Microsoft SQL Server как комплексная высокопроизводительная платформа баз данных. Язык программирования C#. Разработка интерфейса и иллюстрация работы системы.
дипломная работа [2,5 M], добавлен 19.07.2014Порядок и принципы документирования работ, выполняемых на этапе анализа и проектирования в жизненном цикле программных средств, нормативная основа. Описание пользовательского интерфейса прототипа разработанной информационной системы, его структура.
курсовая работа [472,9 K], добавлен 11.11.2014Понятие шаблона проектирования или паттерна в разработке программного обеспечения. Изменение поведения системы (базы данных) с помощью порождающего шаблона программирования - абстрактной фабрики. Программирование базы данных и управление ею на языке С+.
курсовая работа [124,8 K], добавлен 30.04.2011Характеристика состава, интерфейса и основных возможностей программы схемотехнического моделирования и проектирования семейства Micro-Cap8, которая относится к наиболее популярным системам автоматизированного проектирования (САПР) электронных устройств.
реферат [108,0 K], добавлен 12.03.2011Изучение правил проектирования (предоставление пользователю контроля над программой, уменьшение загрузки памяти, увеличение визуальной ясности, последовательность) и принципов разработки пользовательского интерфейса на примере программы "Tidy Start Menu".
курсовая работа [286,6 K], добавлен 27.04.2010Линейка продуктов для осуществления всех стадий проектирования в нефтегазовой отрасли. Характеристика Autocad Plant 3D & Bently Plant как система трехмерного проектирования объектов с разветвленной трубопроводной системой. 4D Explorer и дерево проекта.
презентация [1,5 M], добавлен 11.05.2014Построение графика изменения вероятности безотказной работы от времени наработки. Расчет гамма-процентной наработки технической системы, определение методов ее увеличения путем структурного резервирования, замены малонадежных элементов на более надежные.
контрольная работа [53,3 K], добавлен 07.04.2010Разработка и внедрение программного продукта, позволяющего автоматизировать процесс сбора сведений и ведения журналов полученных анализов в медицинском учреждении. Концепции развития системы здравоохранения. Медицинская информационная система "Квазар".
дипломная работа [1,7 M], добавлен 07.04.2015Классификация информации по разным признакам. Этапы развития информационных систем. Информационные технологии и системы управления. Уровни процесса управления. Методы структурного проектирования. Методология функционального моделирования IDEF0.
курсовая работа [5,2 M], добавлен 20.04.2011Понятие и этапы жизненного цикла информационной системы. Классификация и характеристика бизнес-процессов. Проектирование архитектуры автоматизированной системы управления документооборотом и баз данных. Разработка интерфейса пользовательской части.
дипломная работа [549,9 K], добавлен 09.02.2018Особенности разработки информационных систем с использованием унифицированного языка моделирования UML. Основные этапы рационального унифицированного процесса разработки информационных систем с примерами и иллюстрациями. Реализация информационной системы.
методичка [950,2 K], добавлен 23.01.2014Разработка и реализация проекта информационной системы, предназначенной для хранения сведения о клиентах и недвижимости. Моделирование и реализация информационной системы. Разработка пользовательского интерфейса. Затраты на написание программы и отладку.
курсовая работа [1,0 M], добавлен 30.06.2022Системы автоматического проектирования. Сравнительный анализ средств для проектирования автоматизированных информационных систем. Экспорт SQL-кода в физическую среду и наполнение базы данных содержимым. Этапы развития и характеристика Case-средств.
курсовая работа [1,1 M], добавлен 14.11.2017Выбор методологии проектирования и разработка информационной системы "Расчёт зарплаты" для предприятия ОАО РТП "Авторемонтник". Архитектурное проектирование базы данных информационной системы и разработка её интерфейса. Тестирование программного модуля.
дипломная работа [2,3 M], добавлен 25.05.2014Общие сведения об автоматизированных информационных системах библиотек. Разработка графического макета, интерфейса и дизайна информационной системы. Требования к функциональной части системы. Создание программных модулей. Алгоритмы обработки данных.
дипломная работа [1,7 M], добавлен 04.11.2016Операционная система Windows фирмы Microsoft во всех ее проявлениях. Ее интерфейс как универсальный механизм управления любым приложением ОС. Свойства анимационного пользовательского интерфейса. Настройка программного продукта, его адаптация к технике ПК.
контрольная работа [50,5 K], добавлен 03.05.2009Требования проектирования одного из вариантов покерного калькулятора. Расчет вероятностей появления возможных комбинаций карт в игре при симуляции любого расклада. Модульная структура продукта. Документация по программному коду. Описание test-cases.
курсовая работа [5,2 M], добавлен 03.12.2012Выбор методологии проектирования информационной системы, сбор требований, их моделирование. Архитектурное проектирование, разработка пользовательского интерфейса и модулей. Реализация и аттестация информационной системы. Методика работы с приложением.
дипломная работа [2,9 M], добавлен 25.05.2014