Фасад (шаблон проектирования): различия между версиями

Материал из DZWIKI
Перейти к навигации Перейти к поиску
 
(не показано 7 промежуточных версий этого же участника)
Строка 33: Строка 33:
| title = Исходный текст на языке [[C++]]
| title = Исходный текст на языке [[C++]]
| content =
| content =
<source lang="cpp">
<syntaxhighlight lang="cpp">


#include <iostream>
#include <iostream>
Строка 218: Строка 218:
  * Тони Айомми заканчивает песню мощным аккордом.
  * Тони Айомми заканчивает песню мощным аккордом.
  */
  */
</source>
</syntaxhighlight>
}}
}}


Строка 225: Строка 225:
| title = Исходный текст на языке [[JavaScript]]
| title = Исходный текст на языке [[JavaScript]]
| content =
| content =
<source lang="javascript">
<syntaxhighlight lang="javascript">
/* Complex parts */
/* Complex parts */
function SubSystem1() {
function SubSystem1() {
Строка 274: Строка 274:
   "вызван SubSystem2.methodB"
   "вызван SubSystem2.methodB"
*/
*/
</source>
</syntaxhighlight>
}}
}}
=== PHP ===
=== PHP ===
{{Hider_hiding
{{Hider_hiding
| title = Исходный текст на языке [[PHP]]
| title = Исходный текст на языке [[PHP]]
| content =
| content =
<source lang="php">
<syntaxhighlight lang="php">
/**
/**
  * Реализации отдельных частей компьютера.
  * Реализации отдельных частей компьютера.
Строка 362: Строка 363:
$computer = new Computer();
$computer = new Computer();
$computer->startComputer();
$computer->startComputer();
</source>
</syntaxhighlight>
}}
}}
=== Python ===
=== Python ===
{{Hider_hiding
{{Hider_hiding
| title = Исходный текст на языке [[Python]]
| title = Исходный текст на языке [[Python]]
| content =
| content =
<source lang="python">
<syntaxhighlight lang="python">
# Сложные части системы
# Сложные части системы
class CPU(object):
class CPU(object):
Строка 422: Строка 424:
     facade = Computer()
     facade = Computer()
     facade.startComputer()
     facade.startComputer()
</source>
</syntaxhighlight>
}}
}}
=== C# ===
=== C# ===
{{Hider_hiding
{{Hider_hiding
| title = Исходный текст на языке [[C Sharp|C#]]
| title = Исходный текст на языке [[C Sharp|C#]]
| content =
| content =
<source lang="csharp">
<syntaxhighlight lang="csharp">
using System;
using System;


Строка 513: Строка 516:
     }
     }
}
}
</source>
</syntaxhighlight>
}}
}}
== Литература ==
== Литература ==
* {{книга
* {{книга
Строка 533: Строка 537:
* [http://largescalejs.ru/the-facade-pattern/ Паттерны для масштабируемых JavaScript-приложений. Глава 9. Паттерн «Фасад»] — описание, пример реализации.
* [http://largescalejs.ru/the-facade-pattern/ Паттерны для масштабируемых JavaScript-приложений. Глава 9. Паттерн «Фасад»] — описание, пример реализации.


{{Типы Паттернов}}
{{Типы шаблонов проектирования}}


[[Категория:Шаблоны проектирования]]
[[Категория:Шаблоны проектирования]]
[[Категория:Структурные шаблоны проектирования]]
[[Категория:Структурные шаблоны проектирования]]
[[Категория:Статьи с примерами кода C Sharp]]
[[Категория:Статьи с примерами кода C Sharp]]
[[Категория:Статьи с примерами кода C++]]
[[Категория:Статьи с примерами кода Python]]
[[Категория:Статьи с примерами кода PHP]]
[[Категория:Статьи с примерами кода JavaScript]]

Текущая версия от 00:07, 11 июня 2023

Фасад
Facade
Ошибка Lua в Модуль:Wikidata на строке 288: attempt to index field 'wikibase' (a nil value).
Тип структурный
Описан в Design Patterns Да

Шаблон фасад (англ. Facade) — структурный шаблон проектирования, позволяющий скрыть сложность системы путём сведения всех возможных внешних вызовов к одному объекту, делегирующему их соответствующим объектам системы.

Описание

Файл:Facade.gif

Проблема

Как обеспечить унифицированный интерфейс с набором разрозненных реализаций или интерфейсов, например, с подсистемой, если нежелательно сильное связывание с этой подсистемой или реализация подсистемы может измениться?

Решение

Определить одну точку взаимодействия с подсистемой — фасадный объект, обеспечивающий общий интерфейс с подсистемой, и возложить на него обязанность по взаимодействию с её компонентами. Фасад — это внешний объект, обеспечивающий единственную точку входа для служб подсистемы. Реализация других компонентов подсистемы закрыта и не видна внешним компонентам. Фасадный объект обеспечивает реализацию GRASP паттерна Устойчивый к изменениям (Protected Variations) с точки зрения защиты от изменений в реализации подсистемы.

Особенности применения

Шаблон применяется для установки некоторого рода политики по отношению к другой группе объектов. Если политика должна быть яркой и заметной, следует воспользоваться услугами шаблона Фасад. Если же необходимо обеспечить скрытность и аккуратность (прозрачность), более подходящим выбором является шаблон Заместитель (Proxy).

Примеры

C++

JavaScript

PHP

Python

C#

Литература

Ссылки