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

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.

 

Entscheidungshilfen

Bearbeiten
  • Ü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.

Implementation

Bearbeiten

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 Muster

Bearbeiten

Eine Fassade wird meist als Singleton implementiert.

Weblinks

Bearbeiten

Wikipedia: Fassade (Entwurfsmuster)