Fassadenentwurfsmuster in Java

Fassadendesignmuster in Java

1. Einführung

In diesem kurzen Tutorial werfen wir einen Blick aufone of the structural design patterns: the Facade.

Zunächst geben wir einen Überblick über das Muster, listen seine Vorteile auf und beschreiben, welche Probleme es löst.

Anschließend wenden wir das Fassadenmuster auf ein vorhandenes praktisches Problem mit Java an.

2. Was ist eine Fassade?

Einfach ausgedrückt, kapselt eine Fassade ein komplexes Subsystem hinter einer einfachen Schnittstelle. It hides much of the complexity and makes the subsystem easy to use.

Wenn wir das komplexe Subsystem direkt verwenden müssen, können wir dies trotzdem tun. Wir sind nicht gezwungen, die Fassade ständig zu benutzen.

Neben einer viel einfacheren Benutzeroberfläche bietet die Verwendung dieses Entwurfsmusters noch einen weiteren Vorteil. It decouples a client implementation from the complex subsystem. Danke, wir können Änderungen am vorhandenen Subsystem vornehmen und haben keinen Einfluss auf einen Client.

Lassen Sie uns die Fassade in Aktion sehen.

3. Example

Nehmen wir an, wir wollen ein Auto starten. Das folgende Diagramm stellt das Altsystem dar, mit dem dies möglich ist:

image

 

Wie Sie sehen können,it can be quite complex and does require some effort to start the engine correctly:

airFlowController.takeAir()
fuelInjector.on()
fuelInjector.inject()
starter.start()
coolingController.setTemperatureUpperLimit(DEFAULT_COOLING_TEMP)
coolingController.run()
catalyticConverter.on()

Ebenso sind zum Stoppen des Motors einige Schritte erforderlich:

fuelInjector.off()
catalyticConverter.off()
coolingController.cool(MAX_ALLOWED_TEMP)
coolingController.stop()
airFlowController.off()

Eine Fassade ist genau das, was wir hier brauchen. We’ll hide all the complexity in two methods: startEngine() and stopEngine().

Mal sehen, wie wir es umsetzen können:

public class CarEngineFacade {
    private static int DEFAULT_COOLING_TEMP = 90;
    private static int MAX_ALLOWED_TEMP = 50;
    private FuelInjector fuelInjector = new FuelInjector();
    private AirFlowController airFlowController = new AirFlowController();
    private Starter starter = new Starter();
    private CoolingController coolingController = new CoolingController();
    private CatalyticConverter catalyticConverter = new CatalyticConverter();

    public void startEngine() {
        fuelInjector.on();
        airFlowController.takeAir();
        fuelInjector.on();
        fuelInjector.inject();
        starter.start();
        coolingController.setTemperatureUpperLimit(DEFAULT_COOLING_TEMP);
        coolingController.run();
        catalyticConverter.on();
    }

    public void stopEngine() {
        fuelInjector.off();
        catalyticConverter.off();
        coolingController.cool(MAX_ALLOWED_TEMP);
        coolingController.stop();
        airFlowController.off();
    }

Nunto start and stop a car, we need only 2 lines of code, instead of 13:

facade.startEngine();
// ...
facade.stopEngine();

4. Nachteile

Das Fassadenmuster zwingt uns nicht zu unerwünschten Kompromissen, da es nur zusätzliche Abstraktionsebenen hinzufügt.

Manchmal kann das Muster in einfachen Szenarien überbeansprucht werden, was zu redundanten Implementierungen führt.

5. Fazit

In diesem Artikel haben wir das Fassadenmuster erläutert und gezeigt, wie es auf einem vorhandenen System implementiert werden kann.

Die Implementierung dieser Beispiele kannover on GitHub gefunden werden.