všetky vzory

Facade

Dá jednoduché rozhranie pred zložitý podsystém.

class Warehouse {  reserve(item) {    // lowers the available quantity  }} class Payment {  charge(amount) {    // posts the amount  }} class Shipping {  schedule(address) {    // creates a shipment  }} // The facade knows the order of steps. The client does not have to.class OrderFacade {  constructor() {    this.warehouse = new Warehouse();    this.payment = new Payment();    this.shipping = new Shipping();  }   complete(order) {    this.warehouse.reserve(order.item);    this.payment.charge(order.amount);    this.shipping.schedule(order.address);  }} const facade = new OrderFacade();facade.complete(order);   // one call instead of three

Celý priebeh v texte (8 krokov)
  1. Vzadu je podsystém: tri triedy, každá o niečom inom. Aby objednávka prešla, musia sa zavolať všetky tri.
  2. A musia sa zavolať v poradí. Bez fasády by to poradie musel poznať klient — vedieť, že najprv sa rezervuje tovar, potom sa strháva platba a až nakoniec sa objednáva doprava.
  3. S fasádou zavolá klient jedinú metódu: complete(). Nič viac o podsystéme nevie a ani vedieť nepotrebuje.
  4. Prvý krok: fasáda rezervuje tovar v sklade.
  5. Druhý krok: strhne platbu. Až teraz, keď je tovar istý — opačné poradie by znamenalo strhnutú platbu za tovar, ktorý medzitým niekto kúpil.
  6. Tretí krok: objedná dopravu.
  7. Klient dal jedno volanie a dostal jednu odpoveď. O troch triedach za fasádou sa nedozvedel a poradie ho nikdy nezaujímalo.
  8. Jedno volanie zvonku, tri dovnútra — a to je celý vzor. Fasáda pritom nič nezakazuje: podsystém zostáva prístupný a kto potrebuje viac, siahne doň priamo.

Kedy použiť

  • Fasáda pozná poradie volaní raz za všetkých, volajúci ho nemusí poznať vôbec.
  • Deväťdesiat percent volajúcich chce jednu vec — tá dostane jednu metódu.
  • Pri výmene cudzej knižnice sa prepíše fasáda, nie tridsať miest v aplikácii.
  • Fasáda je prirodzené miesto, kadiaľ jedna vrstva hovorí s druhou.

Pasce

  • Uľahčiť bežný prípad, nie zamurovať podsystém — kto potrebuje viac, ide dovnútra priamo.
  • Zamieňa sa s Adaptérom. Adaptér prekladá tvar rozhrania, fasáda ho len zjednodušuje.
  • Rastie s každým prípadom, až je v nej viac logiky než v podsystéme.
  • Kto zavolá podsystém priamo, nedodrží poradie, ktoré fasáda riešila za neho.
  • Chyby z troch svetov vyletia jednou metódou a nedá sa rozlíšiť, čo zlyhalo.