Uzorak dizajna fasade u Javi
1. Uvod
U ovom brzom uputstvu ćemo pogledati jedan od uzoraka strukturnog dizajna: Fasada.
Prvo ćemo dati pregled uzorka, navesti njegove prednosti i opisati probleme koje rješava.
Zatim ćemo primijeniti obrazac fasade na postojeći, praktični problem s Javom.
2. Što je fasada?
Jednostavno rečeno, fasada obuhvaća složeni podsustav iza jednostavnog sučelja. Skriva velik dio složenosti i čini podsustav jednostavnim za upotrebu.
Također, ako trebamo izravno koristiti složeni podsustav, to još uvijek možemo učiniti; nismo prisiljeni stalno koristiti fasadu.
Osim puno jednostavnijeg sučelja, postoji još jedna prednost korištenja ovog uzorka dizajna. Odvaja klijentsku implementaciju od složenog podsustava. Zahvaljujući tome možemo izmijeniti postojeći podsustav i ne utjecati na klijenta.
Pogledajmo fasadu u akciji.
3. Primjer
Recimo da želimo upaliti automobil. Sljedeći dijagram predstavlja naslijeđeni sustav koji nam to omogućuje:

Kao što vidiš, može biti prilično složen i zahtijeva određeni napor za pravilno pokretanje motora:
airFlowController.takeAir () gorivoInjektor.on () gorivoInjektor.injekt () starter.start () CoolController.setTemperatureUpperLimit (DEFAULT_COOLING_TEMP) CoolController.run () katalitički pretvarač.on ()
Slično tome, zaustavljanje motora također zahtijeva podosta koraka:
fuelInjector.off () CatalyticConverter.off () CoolController.cool (MAX_ALLOWED_TEMP) CoolController.stop () airFlowController.off ()
Fasada je upravo ono što nam ovdje treba. Svu ćemo složenost sakriti na dvije metode: startEngine () i stopEngine ().
Pogledajmo kako to možemo primijeniti:
javna klasa CarEngineFacade {private static int DEFAULT_COOLING_TEMP = 90; privatni statički int MAX_ALLOWED_TEMP = 50; private FuelInjector fuelInjector = novi FuelInjector (); private AirFlowController airFlowController = novi AirFlowController (); privatni Starter starter = novi Starter (); private CoolingController CoolController = novi CoolingController (); private CatalyticConverter CatalyticConverter = novi CatalyticConverter (); javna praznina startEngine () {fuelInjector.on (); airFlowController.takeAir (); fuelInjector.on (); fuelInjector.inject (); starter.start (); CoolController.setTemperatureUpperLimit (DEFAULT_COOLING_TEMP); CoolController.run (); katalitički pretvarač.on (); } javna praznina stopEngine () {fuelInjector.off (); katalitički pretvarač.off (); CoolController.cool (MAX_ALLOWED_TEMP); CoolController.stop (); airFlowController.off (); }
Sada, za pokretanje i zaustavljanje automobila trebaju nam samo 2 retka koda, umjesto 13:
facade.startEngine (); // ... facade.stopEngine ();
4. Nedostaci
Uzorak fasade ne tjera nas na neželjene kompromise, jer dodaje samo dodatne slojeve apstrakcije.
Ponekad se obrazac može pretjerano koristiti u jednostavnim scenarijima, što će dovesti do suvišnih implementacija.
5. Zaključak
U ovom smo članku objasnili uzorak fasade i pokazali kako ga primijeniti na vrhu postojećeg sustava.
Implementacija ovih primjera može se naći na GitHubu.