Fasadedesignmønster i Java

1. Introduksjon

I denne raske opplæringen skal vi ta en titt på et av de strukturelle designmønstrene: fasaden.

Først vil vi gi en oversikt over mønsteret, liste fordelene og beskrive hvilke problemer det løser.

Deretter vil vi bruke fasademønsteret på et eksisterende, praktisk problem med Java.

2. Hva er en fasade?

Enkelt sagt, en fasade innkapsler et komplekst delsystem bak et enkelt grensesnitt. Det skjuler mye av kompleksiteten og gjør delsystemet enkelt å bruke.

Også, hvis vi trenger å bruke det komplekse delsystemet direkte, kan vi fortsatt gjøre det; vi blir ikke tvunget til å bruke fasaden hele tiden.

Foruten et mye enklere grensesnitt, er det en fordel med å bruke dette designmønsteret. Det frakobler en klientimplementering fra det komplekse delsystemet. Takket være dette kan vi gjøre endringer i det eksisterende delsystemet og ikke påvirke en klient.

La oss se fasaden i aksjon.

3. Eksempel

La oss si at vi vil starte en bil. Følgende diagram representerer det eldre systemet, som lar oss gjøre det:

Som du kan se, det kan være ganske komplisert og krever litt innsats for å starte motoren riktig:

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

Tilsvarende krever stopp av motoren også ganske mange trinn:

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

En fasade er akkurat det vi trenger her. Vi vil skjule all kompleksiteten i to metoder: startEngine () og stopEngine ().

La oss 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 (); private AirFlowController airFlowController = ny AirFlowController (); private Starter starter = new Starter (); privat CoolingController coolingController = ny CoolingController (); private CatalyticConverter catalyticConverter = ny 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 (); }

Nå, For å starte og stoppe en bil trenger vi bare to linjer med kode, i stedet for 13:

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

4. Ulemper

Fasademønsteret tvinger oss ikke til uønskede kompromisser, fordi det bare legger til ekstra lag med abstraksjon.

Noen ganger kan mønsteret bli overbrukt i enkle scenarier, noe som vil føre til overflødige implementeringer.

5. Konklusjon

I denne artikkelen har vi forklart fasademønsteret og demonstrert hvordan du implementerer det på toppen av et eksisterende system.

Implementeringen av disse eksemplene finner du på GitHub.