Muster: Facade

FassadeBearbeiten

Die Fassade (engl. facade oder façade) ist eine Schnittstelle für ein Paket.

ZweckBearbeiten

Um den Aufbau innerhalb eines Pakets möglichst flexibel gestalten zu können, ist es meist vorteilhaft, wenn auf die internen Klassen nicht direkt zugegriffen werden kann. Stattdessen setzt man eine Fassade ein, welche alle externen Zugriffe auf das Paket an die entsprechenden Klassen weiterleitet; sie stellt also eine (stabile) Schnittstelle für das gesamte Paket dar. So kann die Implementierung einzelner Funktionen oder gar die gesamte interne Architektur geändert werden, ohne dass die externen Zugriffe ebenfalls entsprechend umgeschrieben werden müssten.

UMLBearbeiten

 

EntscheidungshilfenBearbeiten

  • Überschreitet die Architektur einer Bibliothek eine gewisse Komplexität oder ist mit häufigen Änderungen der internen Struktur zu rechnen, kann eine Fassade eingebaut werden, die eine stabile, einfache Schnittstelle zum Zugriff auf die Funktionen dieser Bibliothek bereitstellt.
  • Wenn auf einzelne Instanzen "hinter" der Fasade zugegriffen werden muss, kann das leider nicht über die Fasade implementiert werden, bzw. es widerspricht ihrem eigentlichen Sinn.

ImplementationBearbeiten

Um eine Fassade zu verwenden, gilt es:

  • Eine Fassadenklasse für das Paket bereitzustellen, welche Methoden für externe Zugriffe anbietet und Anforderungen an interne Klassen delegiert.
  • Im Fassadenkonstruktor die gesamte Klassenstruktur des Paketes zu erzeugen.
  • Interne Klassen gegen den Zugriff von außen zu schützen (z.B. durch Setzten entsprechender Modifier, wie package oder protected).

Verwandte MusterBearbeiten

Eine Fassade wird meist als Singleton implementiert.

WeblinksBearbeiten

Wikipedia: Fassade (Entwurfsmuster)