Als zweite Gruppe von Entwurfsmustern gibt es die Strukturmuster. Diese beschreiben, wie Klassen bzw. ihre Instanzen zu größeren Strukturen zusammengesetzt werden können. Im folgenden wird die Fassade näher vorgestellt.
Stellt eine einheitliche Schnittstelle (Interface) für eine Menge von Schnittstellen zur Verfügung. Führt eine Strukturierungsebene oberhalb von Klassen ein.
Ein häufiges Ziel im Entwurf ist die Minimierung der Abhängigkeiten zu einer Gruppe von eng zusammenarbeitenden Klassen (einem Cluster). Ein Weg zur Erreichung dieses Zieles ist der Einsatz eines Fassaden-Objekts, welches eine einfache Schnittstelle zu der Funktionalität des Clusters anbietet.
Um den Dienstnutzern eine Schnittstelle mit höherem Abstraktionsgrad anzubieten, enthält der "Kompiler-Cluster" auch eine Klasse Kompiler. Diese Klasse definiert eine Schnittstelle zur Funktionalität des Kompilers. Die Klasse Kompiler wirkt dabei wie eine Fassade: sie bietet den Dienstnutzern eine einzige, einfache Schnittstelle zu den Klassen des Kompiler-Clusters an. Sie fasst die Klassen zusammen, welche die Funktionalität des Kompilers realisieren, ohne sie vollständig zu verbergen. Die Kompiler-Fassade macht den meisten Programmierern das Leben durch das Anbieten von Standardfunktionalitäten einfacher, ohne spezielle Funktionalitäten vor jenen zu verbergen, die sie benötigen.
Abbildung 1: Der Aufbau einer Fassade
Abbildung 2: Ein kleines Beispiel für die Verwendung einer Fassade
Man kann das Muster Fassade unter folgenden Bedingungen benutzen:
Ein komplexer Cluster soll eine einfache Schnittstelle erhalten. Cluster werden häufig im Lauf ihrer Entwicklung komplexer. Die meisten Muster führen durch ihre Anwendung zu mehr und kleineren Klassen. Die Anwendung des Musters Fassade macht die Cluster besser wiederverwendbar und adaptierbar, gleichzeitig wird ihre Nutzung aber für jene schwieriger, die keine Adaptierung für ihre Aufgabenstellung benötigen. Eine Fassade bietet eine einfache Standardsicht des Clusters an, die für die meisten Dienstnutzer ausreicht.
Es existieren viele Abhängigkeiten zwischen den Dienstnutzern und den Implementierungsklassen einer Abstraktion. Man verwendet das Muster Fassade um die Abhängigkeiten zwischen den Dienstnutzern und dem Cluster in der Fassaden-Klasse zu konzentrieren und dadurch seine Unabhängigkeit und Portabilität zu erhöhen.
Dienstnutzer, die eine größere Flexibilität oder umfangreichere Funktionalität benötigen, müssen unter Umgehung der Fassade auf einzelne Klassen des Clusters zurückgreifen.
Das Muster Fassade hat folgende Vorteile:
Quelle
[2] Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal Pattern-Oriented Software Architecture — A System of Patterns J. Wiley & Sons, Chichester, 1996