Klassifizierung |
objektbasiertes Strukturmuster
|
| |
Zweck |
einheitliche Schnittstelle zu einer Menge
von Schnittstellen eines Systems
|
|
einfache Schnittstelle für ein komplexes System
|
| |
Alias |
facade
|
| |
Motivation |
Aufteilung eines komplexen Systems in Subsysteme
|
|
Reduktion der Komplexität
|
| |
Beispiel |
Compiler
|
| |
Anwendbarkeit |
|
|
einfache Schnittstelle für komplexes System
|
|
"Hauptprogramm" und Verarbeitung von Optionen
|
|
Entwurfsmuster:
--> viele kleine Klassen
|
|
Fassade:
--> Zusammenfassen und Kapseln
|
|
Entkoppelung:
Klient <--> Subsystem
alles läuft über Fassaden-Schnittstelle
|
| |
Struktur |
Strukturdiagramm
|
| |
Teilnehmer |
|
Fassade |
konkret
delegiert die Aufgaben an die Subsysteme
|
Subsystem[A-C] |
machen die eigentliche Arbeit
|
| |
Konsequenzen |
|
|
Klienten werden vom Subsystem abgeschirmt
|
|
einfachere Benutzung des Systems
|
|
Entkoppelung: Subsystem <--> Klient
|
|
Funktionalität wird delegiert an die Subsysteme
|
| |
Implementierung |
|
|
Reduktion der Kopplung durch Einführen
einer abstrakten Klasse
|
|
unterschiedliche Implementierungen für
Subsysteme möglich
|
|
Zugriffsrechte:
|
|
Java:
|
|
alles in ein Paket, einen eigenen Namensraum
nur die Fassade enthält public Methoden
der Rest ist (höchstens) friendly
|
|
C++:
|
|
keine Pakete, kein friendly, also mehr public
oder mit name spaces arbeiten
|
| |
Beispiele |
|
| |
Datenbank-
Anpassung |
Datenbankstruktur an Kundenschnittstelle anpassen
|
|
Ausganagspunk:
DB-Schema in 1. Normalform
|
|
normalisieren:
# der Tabellen erhöhen
weiter entfernt von der Anwendersicht
|
|
Fassade:
view auf die normalisierten DB-Tabellen
implementieren
|
| |
Bekannte Verwendungen |
|
cc |
C-Compiler bildet Schnittstelle zu Präprozessor, Parser,
Codegenerator, Assembler und Linker
|
| |
verwandte Muster |
|
|
häufig nur ein Objekt der Fassadenklasse notwendig
|
| |