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

  1. KrankenhausempfangDer Krankenhausempfang vereinfacht komplexe Prozesse wie Registrierung, ambulante Sprechstunde, Preisberechnung und Medikamentenausgabe.
  2. Java-Drei-Schichten-ArchitekturDurch das Facade-Muster kann der Zugriff auf die Präsentationsschicht, die Geschäftslogikschicht und die Datenzugriffsschicht vereinfacht werden.

Vorteile

  1. Abhängigkeiten reduzierenAbhängigkeiten zwischen Clients und Subsystemen werden reduziert.
  2. Flexibilität verbessernInterne Änderungen im Subsystem wirken sich nicht auf Clients aus.
  3. 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.

外观模式的 UML 图

Schritt 1

Erstellen Sie eine Schnittstelle.

Shape.java

public interface Shape { void draw(); }

Schritt 2

Erstellen Sie eine Entitätsklasse, die die Schnittstelle implementiert.

Rectangle.java

public class Rectangle implements Shape { @Override public void draw() { System.out.println("Rectangle::draw()"); } }

Square.java

public class Square implements Shape { @Override public void draw() { System.out.println("Square::draw()"); } }

Circle.java

public class Circle implements Shape { @Override public void draw() { System.out.println("Circle::draw()"); } }

Schritt 3

Erstellen Sie eine Fassadenklasse.

ShapeMaker.java

public class ShapeMaker { private Shape circle; private Shape rectangle; private Shape square; public ShapeMaker() { circle = new Circle(); rectangle = new Rectangle(); square = new Square(); } public void drawCircle(){ circle.draw(); } public void drawRectangle(){ rectangle.draw(); } public void drawSquare(){ square.draw(); } }

Schritt 4

Verwenden Sie die Fassadenklasse, um verschiedene Arten von Formen zu zeichnen.

FacadePatternDemo.java

public class FacadePatternDemo { public static void main(String[] args) { ShapeMaker shapeMaker = new ShapeMaker(); shapeMaker.drawCircle(); shapeMaker.drawRectangle(); shapeMaker.drawSquare(); } }

Schritt 5

Programm ausführen, Ergebnis ausgeben:

Circle::draw()
Rectangle::draw()
Square::draw()
Weitere Erweiterungen