Modèle de conception de façade en Java

1. Introduction

Dans ce rapide tutoriel, nous allons jeter un œil à l' un des modèles de conception structurelle: la façade .

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 modèle 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. Il cache une grande partie de la complexité et rend le sous-système facile à utiliser.

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, il y a un autre avantage à utiliser ce modèle de conception. Il dissocie une implémentation client du sous-système complexe. Grâce à cela, nous pouvons apporter des modifications au sous-système existant sans affecter un client.

Voyons la façade en action.

3. Exemple

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

Comme vous pouvez le voir, cela peut être assez complexe et nécessite quelques efforts pour démarrer correctement le moteur :

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 plusieurs é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. Nous cacherons toute la complexité dans deux méthodes: startEngine () et stopEngine () .

Voyons comment nous pouvons l'implémenter:

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, pour démarrer et arrêter une voiture, nous n'avons besoin que de 2 lignes de code, au lieu de 13:

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

4. Inconvénients

Le modèle 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 entraînera 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 sommet d'un système existant.

L'implémentation de ces exemples est disponible à l'adresse over sur GitHub.