Teilnehmer Fassade, steuert Anfragen von Benutzern an das zuständige Subsystemobjekt weiter. Subsystemklassen, implementieren die Subsystemfunktionalität und werden von der Fassade aufgerufen. Sie wissen nichts von der Fassade, das heißt sie besitzen keine Referenz auf die Fassade. Interaktion Der Klient kommuniziert über die Fassade mit dem Subsystem. Die Fassade muß möglicherweise die Aufrufe der Subsystemklassen koordinieren um die Funktionalität abzubilden. Die Klienten sollten die Fassade benutzen. Die Subsystemklassen sollten nur direkt aufgrufen werden, wenn die Fassade die gewünschte Funktionalität nicht anbietet. Konsequenzen Das Subsystem wird einfacher nutzbar durch die Reduzierung von zu verwaltenden Objekten. Es braucht nur die Fassade verwaltet zu werden. Die Fassade schirmt den Benutzer von den einzelnen Subsystemkomponenten ab. Die lose Kopplung zwischen Klienten und Subsystem wird gefördert. Dadurch können Komponenten des Subsystems leichter ausgetauscht werden. Es muß nur die Fassade angepaßt werden. Der Klient kann entscheiden, ob er die Fassade benutzt oder die Subsystemklassen direkt verwendet. Implementierung Reduzierung der Kopplung zwischen Klient und Subsystem. Sie können die Fassade zu einer abstrakten Klasse machen. Die konkreten Unterklassen repräsentieren unterschiedliche Implementationen des Subsystems. Der Klient kommuniziert mit dem Subsystem nur über die Schnittstelle der abstrakten Fassadenklasse, ihm ist nur diese Schnittstelle bekannt. Öffentliche oder private Subsystemklassen. Eine Klasse kapselt Methoden und Eigenschaften. Ein Subsystem kapselt Klassen. Bei einer Klasse gibt es einen öffentlichen und einen privaten Teil der Schnittstelle. Auch bei einem Subsystem sollten Sie über einen öffentlichen und einen privaten Teil der Schnittstelle nachdenken. Die Fassade gehört natürlich zu dem öffentlichen Teil. Aber auch einige Subsystemklassen, die von außen zugreifbar sein sollen, gehören zum öffentlichen Teil. In meinen einführenden Beispiel gehört zum öffentlichen Teil der Schnittstelle die Fassade Uebersetzer, aber auch die Klassen Parser und Scanner. Die Fassade ist eine Schnittstelle zu den Subsystemklassen.