Das Facade Pattern (oder Fassadenmuster) ist ein Software-Entwurfsmuster, das häufig bei der objektorientierten Programmierung verwendet wird. Der Name ist eine Analogie zu einer architektonischen Fassade.

Eine Fassade ist ein Objekt, das eine vereinfachte Schnittstelle zu einem größeren Körper von Code, wie z.B. einer Klassenbibliothek bietet. Eine Fassade kann:

  • eine Softwarebibliothek einfacher zu benutzen, zu verstehen und zu testen machen, da die Fassade bequeme Methoden für allgemeine Aufgaben hat;
  • die Bibliothek aus demselben Grund lesbarer machen;
  • die Abhängigkeiten von externem Code vom Innenleben einer Bibliothek reduzieren, da der meiste Code die Fassade verwendet, was mehr Flexibilität bei der Entwicklung des Systems ermöglicht;
  • eine schlecht entworfene Sammlung von APIs mit einer einzigen gut entworfenen API umhüllen.

Das Fassadenentwurfsmuster wird häufig verwendet, wenn ein System sehr komplex oder schwer zu verstehen ist, weil das System eine große Anzahl voneinander abhängiger Klassen hat oder sein Quellcode nicht verfügbar ist. Dieses Muster verbirgt die Komplexität des größeren Systems und bietet eine einfachere Schnittstelle für den Client. In der Regel handelt es sich um eine einzige Wrapper-Klasse, die eine Reihe von Mitgliedern enthält, die der Client benötigt. Diese Mitglieder greifen im Namen des Fassadenclients auf das System zu und verbergen die Implementierungsdetails.

Verwendung

Eine Fassade wird verwendet, wenn eine leichtere oder einfachere Schnittstelle zu einem zugrunde liegenden Objekt gewünscht wird. Alternativ kann ein Adapter verwendet werden, wenn der Wrapper eine bestimmte Schnittstelle respektieren muss und polymorphes Verhalten unterstützen muss. Ein Dekorator ermöglicht es, das Verhalten einer Schnittstelle zur Laufzeit hinzuzufügen oder zu ändern.

Muster Intent
Adapter Wandelt eine Schnittstelle in eine andere um, so dass sie dem entspricht, was der Client erwartet
Dekorator Fügt der Schnittstelle dynamisch Verantwortung hinzu, indem es den ursprünglichen Code umhüllt
Fassade Bietet eine vereinfachte Schnittstelle

Das Fassadenmuster wird typischerweise verwendet, wenn:

  • eine einfache Schnittstelle für den Zugriff auf ein komplexes System benötigt wird;
  • die Abstraktionen und Implementierungen eines Subsystems eng miteinander gekoppelt sind;
  • ein Einstiegspunkt für jede Ebene der geschichteten Software benötigt wird; oder
  • ein System sehr komplex oder schwer zu verstehen ist.

Struktur

Fassade: Die Fassadenklasse abstrahiert die Pakete 1, 2 und 3 vom Rest der Anwendung.Clients: Die Objekte verwenden das Fassadenmuster, um auf Ressourcen der Pakete zuzugreifen.

Beispiel

Dies ist ein abstraktes Beispiel dafür, wie ein Client („Sie“) mit einer Fassade (dem „Computer“) zu einem komplexen System (interne Computerteile, wie CPU und Festplatte) interagiert.

/* Complex parts */class CPU { freeze() { /* code here */ } jump(position) { /* code here */ } execute() { /* code here */ }}class Memory { load(position, data) { /* code here */ }}class HardDrive { read(lba, size) { /* code here */ }}/* Facade */class ComputerFacade { constructor() { this.processor = new CPU(); this.ram = new Memory(); this.hd = new HardDrive(); } start() { this.processor.freeze(); this.ram.load(this.BOOT_ADDRESS, this.hd.read(this.BOOT_SECTOR, this.SECTOR_SIZE)); this.processor.jump(this.BOOT_ADDRESS); this.processor.execute(); }}/* Client */let computer = new ComputerFacade();computer.start();

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.