Fassadenmuster
Li Patron Facade oculta li complexitá del sistema e provide un interfacie per quel clientes posse acceder li sistema. Ti tip de patron de design apartene al patrones structural, e it adjunte un interfacie a un sistema existent por ocultar su complexitá.
Ti patron implica un singul classe quel provide simplificat metodes por client requestes e delega vocations a metodes de existent classes del sistema.
Einführung
Absicht
Eine konsistente High-Level-Schnittstelle für ein komplexes Subsystem bereitstellen. Auf diese Weise kann Client-Code über diese vereinfachte Schnittstelle mit dem Subsystem interagieren, ohne die interne Komplexität des Subsystems verstehen zu müssen.
Wesentliche gelöste Probleme
- Die Kopplung zwischen Clients und komplexen Subsystemen reduzieren.
- Client-Operationen auf komplexen Systemen vereinfachen und interne Implementierungsdetails verbergen.
Anwendungsfall
- Wenn Clients die komplexe interne Logik und die Komponenteninteraktionen des Systems nicht verstehen müssen.
- Wenn ein klarer Einstiegspunkt für das gesamte System definiert werden muss.
Implementierungsansatz
- Facade-Klasse erstellenDefinieren Sie eine Klasse (Facade) als Vermittler zwischen Clients und Subsystemen.
- Subsystemoperationen kapselnDie Facade-Klasse kapselt komplexe Subsystemoperationen in einfachen Methoden.
Schlüsselcode
- Facade-KlasseEine High-Level-Schnittstelle bereitstellen, um die Interaktion zwischen Clients und Subsystemen zu vereinfachen.
- Subsystem-KlasseSpezifische Geschäftslogik implementieren, die von der Facade-Klasse aufgerufen wird.
Anwendungsbeispiel
- KrankenhausempfangDer Krankenhausempfang vereinfacht komplexe Prozesse wie Registrierung, ambulante Sprechstunde, Preisberechnung und Medikamentenausgabe.
- Java-Drei-Schichten-ArchitekturDurch das Facade-Muster kann der Zugriff auf die Präsentationsschicht, die Geschäftslogikschicht und die Datenzugriffsschicht vereinfacht werden.
Vorteile
- Abhängigkeiten reduzierenAbhängigkeiten zwischen Clients und Subsystemen werden reduziert.
- Flexibilität verbessernInterne Änderungen im Subsystem wirken sich nicht auf Clients aus.
- Sicherheit erhöhenVerbirgt die interne Implementierung des Subsystems und legt nur notwendige Operationen offen.
Nachteile
- Verletzt das Open-Closed-PrinzipÄnderungen am Subsystem können entsprechende Änderungen an der Fassadenklasse erfordern.
Verwendungshinweise
- Verwenden Sie das Fassadenmuster, wenn Sie den Zugriff auf ein komplexes System vereinfachen müssen.
- Stellen Sie sicher, dass die von der Fassadenklasse bereitgestellten Methoden einfach genug sind, damit Clients sie verwenden können.
Hinweise
- Das Fassadenmuster eignet sich für geschichtete Strukturen und kann einen klaren Einstiegspunkt für jede Schicht bereitstellen.
- Vermeiden Sie die übermäßige Verwendung des Fassadenmusters, damit nicht zu viele Details verborgen werden, was zu Wartungsschwierigkeiten führen kann.
Struktur
Das Fassadenmuster umfasst die folgenden Kernrollen:
Fassade:
- Stellen Sie eine vereinfachte Schnittstelle bereit, die die Komplexität des Systems kapselt. Clients des Fassadenmusters interagieren mit dem Fassadenobjekt, ohne direkt mit den verschiedenen Komponenten des Systems umgehen zu müssen.
Subsystem:
- Besteht aus mehreren miteinander verbundenen Klassen, die für die spezifischen Funktionen des Systems verantwortlich sind. Das Fassadenobjekt erfüllt Client-Anfragen durch Aufrufen dieser Subsysteme.
Client:
- Verwenden Sie das Fassadenobjekt, um mit dem System zu interagieren, ohne die spezifische interne Implementierung des Systems verstehen zu müssen.
Implementierung
Wir werden eineShape-Schnittstelle und die ImplementierungShape, die Entitätsklasse der Schnittstelle, erstellen. Der nächste Schritt ist, eine Fassadenklasse zu definieren.ShapeMaker。
ShapeMakerDie Klasse verwendet Entitätsklassen, um Benutzeraufrufe an diese Klassen darzustellen.FacadePatternDemoKlassenverwendungShapeMaker-Klasse, um das Ergebnis anzuzeigen.
Schritt 1
Erstellen Sie eine Schnittstelle.
Shape.java
Schritt 2
Erstellen Sie eine Entitätsklasse, die die Schnittstelle implementiert.
Rectangle.java
Square.java
Circle.java
Schritt 3
Erstellen Sie eine Fassadenklasse.
ShapeMaker.java
Schritt 4
Verwenden Sie die Fassadenklasse, um verschiedene Arten von Formen zu zeichnen.
FacadePatternDemo.java
Schritt 5
Programm ausführen, Ergebnis ausgeben:
Circle::draw() Rectangle::draw() Square::draw()Weitere Erweiterungen