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.