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.