Modèle de conception de façade en Java

Modèle de conception de façade en Java

1. introduction

Dans ce rapide tutoriel, nous allons jeter un œil àone of the structural design patterns: the Facade.

Tout d'abord, nous allons donner un aperçu du modèle, énumérer ses avantages et décrire les problèmes qu'il résout.

Ensuite, nous appliquerons le motif de façade à un problème pratique existant avec Java.

2. Qu'est-ce qu'une façade?

En termes simples, une façade encapsule un sous-système complexe derrière une interface simple. It hides much of the complexity and makes the subsystem easy to use.

De plus, si nous devons utiliser directement le sous-système complexe, nous pouvons toujours le faire; nous ne sommes pas obligés d’utiliser la façade tout le temps.

Outre une interface beaucoup plus simple, l’utilisation de ce modèle de conception présente un autre avantage. It decouples a client implementation from the complex subsystem.  Grâce à cela, nous pouvons apporter des modifications au sous-système existant et n'affecter aucun client.

Voyons la façade en action.

3. Example

Disons que nous voulons démarrer une voiture. Le diagramme suivant représente le système existant, ce qui nous permet de le faire:

image

 

Comme vous pouvez le voir,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()

De même, l’arrêt du moteur nécessite également quelques étapes:

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

Une façade est exactement ce dont nous avons besoin ici. We’ll hide all the complexity in two methods: startEngine() and stopEngine().

Voyons comment nous pouvons le mettre en œuvre:

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();
    }

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

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

4. Désavantages

Le motif de façade ne nous oblige pas à faire des compromis indésirables, car il ne fait qu’ajouter des couches supplémentaires d’abstraction.

Parfois, le modèle peut être surutilisé dans des scénarios simples, ce qui conduit à des implémentations redondantes.

5. Conclusion

Dans cet article, nous avons expliqué le modèle de façade et montré comment l’implémenter au-dessus d’un système existant.

L'implémentation de ces exemples peut être trouvéeover on GitHub.