Intent

  • Bied een uniforme interface voor een reeks interfaces in een subsysteem.Facade definieert een interface op een hoger niveau die het gebruik van het subsysteem eenvoudiger maakt.
  • Verpak een gecompliceerd subsysteem met een eenvoudiger interface.

Probleem

Een deel van de klantengemeenschap heeft behoefte aan een vereenvoudigde interface voor de algehele functionaliteit van een complex subsysteem.

Discussie

Facade bespreekt het inkapselen van een complex subsysteem in een enkel interface-object. Dit vermindert de leercurve die nodig is om met succes gebruik te maken van het subsysteem. Het bevordert ook het loskoppelen van het subsysteem van zijn potentieel vele cliënten. Aan de andere kant, als de façade het enige toegangspunt is voor het subsysteem, zal het de mogelijkheden en flexibiliteit beperken die “power users” nodig kunnen hebben.

Het façade-object zou een tamelijk eenvoudige pleitbezorger of facilitator moeten zijn. Het moet geen alwetend orakel of “god” object worden.

Structuur

Facade neemt een “raadsel gewikkeld in een enigma gehuld in mysterie”, en voegt een omhulsel toe dat de amorfe en ondoorgrondelijke massa van software temt.

SubsystemOne en SubsystemThree hebben geen interactie met de interne componenten van SubsystemTwo. Zij gebruiken de SubsystemTwoWrapper “façade” (d.w.z. de abstractie op een hoger niveau).

Example

De façade definieert een uniforme interface op een hoger niveau voor een subsysteem, waardoor het gemakkelijker te gebruiken is. Consumenten komen met een Facade in aanraking bij het bestellen uit een catalogus. De consument belt een nummer en spreekt met een vertegenwoordiger van de klantendienst. De medewerker van de klantenservice fungeert als een façade, die een interface vormt met de afdeling die de bestelling afhandelt, de factureringsafdeling en de verzendafdeling.

Check list

  1. Identificeer een eenvoudiger, uniforme interface voor het subsysteem of de component.
  2. Ontwerp een ‘wrapper’-klasse die het subsysteem inkapselt.
  3. De façade/wrapper vangt de complexiteit en samenwerkingsverbanden van de component op, en delegeert naar de juiste methoden.
  4. De client gebruikt (is gekoppeld aan) alleen de façade.
  5. Bedenk of extra Facades waarde zouden toevoegen.

Vuistregels

  • Facade definieert een nieuwe interface, terwijl Adapter een oude interface gebruikt.Onthoud dat Adapter twee bestaande interfaces laat samenwerken, in plaats van een geheel nieuwe te definiëren.
  • Waar Flyweight laat zien hoe je heel veel kleine objecten kunt maken, laat Facades zien hoe je één object een heel subsysteem kunt laten vertegenwoordigen.
  • Mediator lijkt op Facade in die zin dat het de functionaliteit van bestaande klassen abstraheert. Mediator abstraheert/centraliseert arbitraire communicatie tussen collega-objecten. Het voegt routinematig “waarde toe”, en het is bekend/ernaar verwezen door de collega-objecten. Facade daarentegen definieert een eenvoudigere interface voor een subsysteem, voegt geen nieuwe functionaliteit toe en is niet bekend bij de subsysteemklassen.
  • Abstract Factory kan als alternatief voor Facade worden gebruikt om platform-specifieke klassen te verbergen.
  • Facade-objecten zijn vaak Singletons, omdat er maar één Facade-object nodig is.
  • Adapter en Facade zijn beide wrappers; maar het zijn verschillende soorten wrappers. De bedoeling van Facade is om een eenvoudiger interface te maken, en de bedoeling van Adapter is om een ontwerp te maken naar een bestaande interface.Terwijl Facade routinematig meerdere objecten wrapt en Adapter slechts één object; Facade zou een enkel complex object kunnen front-enden enAdapter zou verschillende legacy objecten kunnen wrappen.

Vraag: Dus de manier om het verschil te zien tussen hetAdapter patroon en het Facade patroon is dat de Adapter één klasse omhult en de Facade vele klassen kan vertegenwoordigen?

Antwoord: Nee! Vergeet niet, de Adapter patroon verandert de interface van een of meer klassen in een interface die een client verwacht. Hoewel de meeste voorbeelden in het leerboek laten zien dat de adapter één klasse aanpast, kan het zijn dat je veel klassen moet aanpassen om de interface te bieden waar een client op is gecodeerd. Op dezelfde manier kan een Facade een vereenvoudigde interface bieden aan een enkele klasse met een zeer complexe interface. Het verschil tussen de twee ligt niet in het aantal klassen, maar in hun bedoeling.

Steun onze gratis website en bezit het eBook!

  • 22 design patterns en 8 principes diepgaand uitgelegd
  • 406 goed gestructureerde, makkelijk te lezen, jargon-vrije pagina’s
  • 228 duidelijke en behulpzame illustraties en diagrammen
  • Een archief met code voorbeelden in 4 talen
  • Alle apparaten ondersteund: EPUB/MOBI/PDF formaten

Meer informatie…

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.