Evgenii Legotckoi
Evgenii Legotckoi27 вересня 2018 р. 05:11

Структурні шаблони проектування - Фасад

Голи

  • Надати уніфікований інтерфейс для набору інтерфейсів у підсистемі. Фасад визначає інтерфейс вищого рівня, який полегшує використання підсистеми.
  • Оберти складну підсистему простішим інтерфейсом.

Проблеми

Для сегмента клієнтського доступу потрібен спрощений інтерфейс доступу до загальної функціональності складної підсистеми.


Обговорення

Фасад використовує інкапсуляцію складної підсистеми всередині одного інтерфейсу. Це зменшує криву навчання, необхідну успішного використання підсистеми. Це також сприяє відв'язуванню підсистеми потенційно від багатьох клієнтів. З іншого боку, якщо Facade є єдиною точкою доступу для підсистеми, це обмежить можливості та гнучкість, які можуть знадобитися досвідченим користувачам.

Об'єкт Facade має бути досить простим посередником. Він повинен ставати всезнаючим оракулом чи «божественним» об'єктом.

Структура

Фасад бере в себе «загадку, загорнуту в загадку, оповиту таємницею», і додає оболонку, яка приручає аморфну та незбагненну масу програмного забезпечення для надання простого та зрозумілого клієнтського інтерфейсу.

SubsystemOne і SubsystemThree не взаємодіють із внутрішніми компонентами SubsystemTwo. Вони використовують «фасад» SubsystemTwoWrapper (тобто абстракція вищого рівня).

Приклад

Фасад визначає уніфікований інтерфейс вищого рівня підсистеми, яка спрощує її використання. Споживачі стикаються з фасадом під час замовлення з каталогу. Споживач дзвонить на один номер та розмовляє з представником служби підтримки клієнтів. Представник служби підтримки клієнтів виступає як фасад, надаючи інтерфейс відділу виконання замовлень, відділу білінгу та відділу доставки.

Контрольний список

  1. Визначте простіший уніфікований інтерфейс для підсистеми або компонента.
  2. Створіть клас 'wrapper', який інкапсулює підсистему.
  3. Фасад/обертання нівелює складність і взаємодію з компонентом, делегуючи відповідні методи.
  4. Клієнт використовує (прив'язаний до) лише фасад.
  5. Подумайте, чи додасть фасад додаткові значення та функціонал.

Емпіричні правила

  • Фасад визначає новий інтерфейс, тоді як Adapter використовує старий інтерфейс. Пам'ятайте, що адаптер підтримує два існуючі інтерфейси, а не визначає абсолютно новий.
  • В той час, як Flyweight показує, як зробити багато маленьких об'єктів, Facade показує, як зробити один об'єкт, що представляє цілу підсистему.
  • Посередник схожий на Facade, оскільки він абстрагує функціональність існуючих класів. Посередник реферує/централізує довільні зв'язки між об'єктами колег. Навпаки, Facade визначає простіший інтерфейс для підсистеми, він не додає нових функцій, і він не відомий підсистем.
  • Абстрактну фабрику можна використовувати як альтернативу Facade для приховання класів, специфічних для платформи.
  • Об'єкти фасаду часто є синглтонами, тому що потрібно лише один об'єкт Facade.
  • Адаптер і фасад - обидві обгортки; але це різні види обгорток. Метою Фасаду є створення простішого інтерфейсу, і метою адаптера є розробка існуючого інтерфейсу. Хоча Facade зазвичай обгортає кілька об'єктів, а Adapter обгортає один об'єкт; Фасад міг би мати інтерфейсний комплекс із одним складним об'єктом, а адаптер міг би обернути кілька застарілих об'єктів.
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:84бали,
  • Рейтинг балів4
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:42бали,
  • Рейтинг балів-8
ОК

Qt - Тест 001. Сигналы и слоты

  • Результат:47бали,
  • Рейтинг балів-6
Останні коментарі
ИМ
Игорь Максимов22 листопада 2024 р. 11:51
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 жовтня 2024 р. 14:37
Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 жовтня 2024 р. 08:19
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов05 жовтня 2024 р. 07:51
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas505 липня 2024 р. 11:02
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Дмитрий
Дмитрий03 лютого 2025 р. 06:24
Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
NW
Nayo Wai30 січня 2025 р. 09:22
не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
n
nkly03 січня 2025 р. 02:52
Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
M
Marsel16 серпня 2023 р. 14:26
OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Evgenii Legotckoi
Evgenii Legotckoi24 червня 2024 р. 15:11
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.

Слідкуйте за нами в соціальних мережах