Gevelontwerppatroon in Java

1. Inleiding

In deze korte tutorial gaan we kijken naar een van de structurele ontwerppatronen: de gevel.

Eerst geven we een overzicht van het patroon, zetten we de voordelen op een rij en beschrijven we welke problemen het oplost.

Vervolgens passen we het gevelpatroon toe op een bestaand, praktisch probleem met Java.

2. Wat is een gevel?

Simpel gezegd, een gevel kapselt een complex subsysteem in achter een eenvoudige interface. Het verbergt veel van de complexiteit en maakt het subsysteem gebruiksvriendelijk.

Ook als we het complexe subsysteem direct moeten gebruiken, kunnen we dat nog steeds doen; we worden niet gedwongen om de gevel altijd te gebruiken.

Naast een veel eenvoudigere interface is er nog een voordeel van het gebruik van dit ontwerppatroon. Het koppelt een clientimplementatie los van het complexe subsysteem. Hierdoor kunnen we wijzigingen aanbrengen in het bestaande subsysteem en hebben we geen invloed op een klant.

Laten we de façade in actie zien.

3. Voorbeeld

Laten we zeggen dat we een auto willen starten. Het volgende diagram geeft het legacysysteem weer, waardoor we dit kunnen doen:

Zoals je kunt zien, het kan behoorlijk ingewikkeld zijn en vergt enige inspanning om de motor correct te starten:

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

Evenzo vereist het stoppen van de motor nogal wat stappen:

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

Een gevel is precies wat we hier nodig hebben. We verbergen alle complexiteit op twee manieren: start motor() en stopEngine ().

Laten we eens kijken hoe we het kunnen implementeren:

openbare klasse CarEngineFacade {privé statische int DEFAULT_COOLING_TEMP = 90; privé statische int MAX_ALLOWED_TEMP = 50; privé FuelInjector fuelInjector = new FuelInjector (); privé AirFlowController airFlowController = nieuwe AirFlowController (); private Starter starter = nieuwe Starter (); private CoolingController coolingController = nieuwe CoolingController (); private CatalyticConverter catalyticConverter = nieuwe CatalyticConverter (); openbare ongeldige startEngine () {fuelInjector.on (); airFlowController.takeAir (); brandstofinjector.on (); brandstofinjector.inject (); starter.start (); coolingController.setTemperatureUpperLimit (DEFAULT_COOLING_TEMP); coolingController.run (); catalyticConverter.on (); } openbare ongeldige stopEngine () {fuelInjector.off (); catalyticConverter.off (); coolingController.cool (MAX_ALLOWED_TEMP); coolingController.stop (); airFlowController.off (); }

Nu, om een ‚Äč‚Äčauto te starten en te stoppen, hebben we slechts 2 regels code nodig, in plaats van 13:

gevel.startEngine (); // ... gevel.stopEngine ();

4. Nadelen

Het gevelpatroon dwingt ons niet tot ongewenste afwegingen, omdat het alleen extra abstractielagen toevoegt.

Soms kan het patroon te veel worden gebruikt in eenvoudige scenario's, wat zal leiden tot overbodige implementaties.

5. Conclusie

In dit artikel hebben we het gevelpatroon uitgelegd en laten zien hoe je het bovenop een bestaand systeem kunt implementeren.

De implementatie van deze voorbeelden is te vinden op GitHub.