© 1999-2003, Flemming Koch Jensen
Alle rettigheder forbeholdt
Facade Pattern

 

 

Motivation
Kompliceret Hvis en klient har kendskab til en lang række objekter, kan det gøre implementationen af klienten meget kompliceret.
Figur 1:
Klient med kendskab til flere objekter i samme objektsystem

Det er her vist hvordan disse objekter kan være en del af det samme objektsystem.

 

Problem

Vi ønsker at forenkle en klients tilgang til en række objekter, der tilhører det samme objektsystem.

 

Løsning

Løsningen er at indføre et objekt mellem klient og objektsystem, som repræsenterer objektsystemet overfor klienten
Figur 2:
Et objekt mellem klient og objekt-system

  Man kalder generelt dette objekt en Facade, da det fungerer som et interface til det bagvedliggende objektsystem.

 

Klassediagram

Figur 3:
Klasse-diagrammet

  Som man ser vil Facade-klassen typisk have kendskab til en lang række klasser, nemlig de klasser som klienten før skulle kende.
  Flere forskellige slags klienter kan anvender instanser af den samme Facade-klasse, blot interfacet i Facade-klassen indeholde de metoder som klienterne ønsker at anvende. I sådanne situationer vil det ofte være tilstrækkeligt med én fælles instans:
Figur 4:
Flere klienter kan bruge samme Facade

 

Implementation

Som udgangspunkt vil der være en 1-til-1 relation mellem Facade'ns metoder og metoder i de bagvedliggende objekters signaturer. Det betyder at Facade'n fungerer som et samlende Handle i relation til Handle Pattern; hvor Facade'n blot delegerer kaldene videre uden at påvirke funktionaliteten.
Man kan også lade Facade'n adapte nogle af metoderne, så Facade-klassens interface indeholder metoder, der sender requests til en eller flere af de bagvedliggende objekter, i stil med Adapter Pattern.

 

Relationer til andre patterns

 

Mediator Pattern

Facade Pattern har visse ligheder med Mediator Pattern. I Mediator Pattern kan man se Mediator'en som en slags Facade, der repræsenterer resten af objektsystemet, overfor det enkelte medlem af objektsystemet, der kan ses i en klientrolle. En Mediator er mere end en Facade, men i sin simpleste form er der stor lighed.

 

Referencer

  [GoF94] s.185-193.
  [Grand98] s.205-211.