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
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50бали,
  • Рейтинг балів-4
m
  • molni99
  • 26 жовтня 2024 р. 08:37

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80бали,
  • Рейтинг балів4
m
  • molni99
  • 26 жовтня 2024 р. 08:29

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20бали,
  • Рейтинг балів-10
Останні коментарі
ИМ
Игорь Максимов22 листопада 2024 р. 19:51
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 жовтня 2024 р. 21:37
Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 жовтня 2024 р. 15:19
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов05 жовтня 2024 р. 14:51
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas505 липня 2024 р. 18:02
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi
Evgenii Legotckoi24 червня 2024 р. 22:11
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey115 листопада 2024 р. 14:04
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProject04 червня 2022 р. 10:49
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9Anonim25 жовтня 2024 р. 16:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

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