Фасад
Facade
Тип структурный
Описан в Design Patterns Да

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

Описание

править

Проблема

править

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

Решение

править

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

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

править

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

Примеры

править

C++

править

JavaScript

править

CoffeeScript

править

PHP

править

Python

править

C#

править

Ruby

править

VB.NET

править

Delphi

править

Java

править

Haxe

править

Swift

править

Литература

править
  • Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования = Design Patterns: Elements of Reusable Object-Oriented Software. — СПб.: «Питер», 2007. — С. 366. — ISBN 978-5-469-01136-1. (также ISBN 5-272-00355-1)

Источники и ссылки

править

📚 Artikel Terkait di Wikipedia

PHPUnit

января 2020 года. <?php use PHPUnit\Framework\TestCase; class ExampleTest extends TestCase { public function test_emptyStack(): void { $empty_stack = array();

Проба Поппельрейтера

Rebecca Sells, Andrew J Larner. The Poppelreuter figure visual perceptual function test for dementia diagnosis (англ.) // Progress in Neurology and Psychiatry

Одиночка (шаблон проектирования)

$test = &Singleton::getInstance(); ?> Пример на языке PHP5 <?php class Singleton { private static $instance; // экземпляр объекта private function __construct(){

Beretta M9

 426-427. Ambrose, 1982, Function w/Various Ammo, p. 432. Ambrose, 1982, Effective Range ≥ 100m, p. 432. Ambrose, 1982, Durability Test. Service Life ≥ 5000

Haxe

bar:String; public function new(){ foo=1; bar="2";} function anyFooBar(v:{foo:Int,bar:String}) trace(v.foo); static function test(){ var fb = new FooBar();

Mocha (фреймворк)

install -g mocha $ mkdir test var assert = require("assert") describe('Foo', function(){ describe('#getBar(value)', function(){ it('should return 100

Xojo

перегрузку операторов. Sub TestFunc(ByVal Param1 As String, ByVal Param2 As Integer) 'Function Code Goes Here End Sub Function TestFunc(ByVal Param1 As String

Фабричный метод (шаблон проектирования)

PHP <?php interface Product{ public function GetName(); } class ConcreteProductA implements Product{ public function GetName() { return "ProductA"; } }