Fasádny návrhový vzor v Jave

1. Úvod

V tomto rýchlom výučbe sa pozrieme na jeden z konštrukčných vzorov: Fasáda.

Najskôr poskytneme prehľad vzoru, uvedieme jeho výhody a popíšeme, aké problémy rieši.

Potom použijeme vzor fasády na existujúci praktický problém s Javou.

2. Čo je to fasáda?

Jednoducho povedané, fasáda zapuzdruje zložitý subsystém za jednoduchým rozhraním. Skrýva veľkú časť zložitosti a uľahčuje používanie subsystému.

Pokiaľ tiež potrebujeme priamo použiť zložitý subsystém, stále to dokážeme; nie sme nútení neustále používať fasádu.

Okrem oveľa jednoduchšieho rozhrania má tento dizajnový vzor ešte jednu výhodu. Oddeľuje implementáciu klienta od zložitého subsystému. Vďaka tomu môžeme vykonávať zmeny v existujúcom subsystéme a neovplyvňovať klienta.

Pozrime sa na fasádu v akcii.

3. Príklad

Povedzme, že chceme naštartovať auto. Nasledujúci diagram predstavuje pôvodný systém, ktorý nám to umožňuje:

Ako môžeš vidieť, môže to byť dosť zložité a na správne naštartovanie motora je potrebné určité úsilie:

airFlowController.takeAir () fuelInjector.on () fuelInjector.inject () starter.start () CoolController.setTemperatureUpperLimit (DEFAULT_COOLING_TEMP) CoolController.run () katalyticConverter.on ()

Podobne je na zastavenie motora potrebných niekoľko krokov:

fuelInjector.off () katalyticConverter.off () CoolController.cool (MAX_ALLOWED_TEMP) CoolController.stop () airFlowController.off ()

Fasáda je to, čo tu potrebujeme. Celú zložitosť skryjeme dvoma spôsobmi: startEngine () a stopEngine ().

Pozrime sa, ako to môžeme implementovať:

verejná trieda CarEngineFacade {private static int DEFAULT_COOLING_TEMP = 90; súkromný statický int MAX_ALLOWED_TEMP = 50; private FuelInjector fuelInjector = nový FuelInjector (); private AirFlowController airFlowController = nový AirFlowController (); súkromný štartér Starter = nový štartér (); private CoolingController CoolController = nový CoolingController (); private CatalyticConverteratalyticConverter = nový CatalyticConverter (); public void startEngine () {fuelInjector.on (); airFlowController.takeAir (); fuelInjector.on (); fuelInjector.inject (); starter.start (); CoolController.setTemperatureUpperLimit (DEFAULT_COOLING_TEMP); CoolController.run (); katalyticConverter.on (); } public void stopEngine () {fuelInjector.off (); katalyticConverter.off (); CoolController.cool (MAX_ALLOWED_TEMP); CoolController.stop (); airFlowController.off (); }

Teraz, na naštartovanie a zastavenie automobilu potrebujeme namiesto 13 iba 2 riadky kódu:

fasada.startEngine (); // ... fasada.stopEngine ();

4. Nevýhody

Vzor fasády nás nenúti k nežiaducim kompromisom, pretože pridáva iba ďalšie vrstvy abstrakcie.

Niekedy je možné vzor v jednoduchých scenároch nadmerne použiť, čo povedie k nadbytočným implementáciám.

5. Záver

V tomto článku sme vysvetlili vzor fasády a ukázali, ako ju implementovať na vrchol existujúceho systému.

Implementáciu týchto príkladov možno nájsť na GitHub.


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