Facadedesignmønster i Java

1. Introduktion

I denne hurtige vejledning skal vi se på et af de strukturelle designmønstre: facaden.

Først giver vi et overblik over mønsteret, viser fordelene og beskriver hvilke problemer det løser.

Derefter anvender vi facademønsteret på et eksisterende, praktisk problem med Java.

2. Hvad er en facade?

Kort sagt, en facade indkapsler et komplekst undersystem bag en simpel grænseflade. Det skjuler meget af kompleksiteten og gør delsystemet let at bruge.

Også, hvis vi har brug for at bruge det komplekse delsystem direkte, kan vi stadig gøre det; vi er ikke tvunget til at bruge facaden hele tiden.

Udover en meget enklere grænseflade er der endnu en fordel ved at bruge dette designmønster. Det afkobler en klientimplementering fra det komplekse delsystem. Takket være dette kan vi foretage ændringer i det eksisterende delsystem og ikke påvirke en klient.

Lad os se facaden i aktion.

3. Eksempel

Lad os sige, at vi vil starte en bil. Følgende diagram repræsenterer det ældre system, som giver os mulighed for at gøre det:

Som du kan se, det kan være ret komplekst og kræver en vis indsats for at starte motoren korrekt:

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

Tilsvarende kræver det også et par trin at stoppe motoren:

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

En facade er lige hvad vi har brug for her. Vi skjuler al kompleksiteten i to metoder: startEngine () og stopEngine ().

Lad os se, hvordan vi kan implementere det:

offentlig klasse CarEngineFacade {privat statisk int DEFAULT_COOLING_TEMP = 90; privat statisk int MAX_ALLOWED_TEMP = 50; private FuelInjector fuelInjector = ny FuelInjector (); privat AirFlowController airFlowController = ny AirFlowController (); privat starter starter = ny starter (); privat CoolingController coolingController = ny CoolingController (); private CatalyticConverter catalyticConverter = ny CatalyticConverter (); offentlig ugyldig 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); afkølingskontrol.stop (); airFlowController.off (); }

Nu, for at starte og stoppe en bil har vi kun brug for 2 linjer kode i stedet for 13:

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

4. Ulemper

Facademønsteret tvinger os ikke til uønskede kompromiser, fordi det kun tilføjer yderligere abstraktionslag.

Nogle gange kan mønsteret blive overbrugt i enkle scenarier, hvilket vil føre til overflødige implementeringer.

5. Konklusion

I denne artikel har vi forklaret facademønsteret og demonstreret, hvordan man implementerer det oven på et eksisterende system.

Implementeringen af ​​disse eksempler findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found