Ce este
Șablonul Facade pune o singură ușă simplă în fața unui subsistem complicat. În spatele ușii, mai multe părți colaborează în ordinea potrivită; în fața ei, apelantul face un singur apel.
Subsistemul rămâne pe deplin disponibil pentru cei care au nevoie de detalii — facade-ul este o comoditate, nu un zid.
Exemplu: un singur apel pornește ziua
Încălzitor, lumini, espressor — trei părți, fiecare cu metoda ei și cu ordinea ei potrivită. startDay() ascunde coregrafia în spatele unui singur apel.
O singură ușă simplă
Apelantul scrie o singură linie, new House().startDay(); facade-ul știe ordinea (întâi căldura, la final cafeaua). Dacă rutina se schimbă, se schimbă doar facade-ul.
Ieșire: program TypeScript și rezultatul capturat
class Heater {
on(): void {
console.log("încălzitor: se încălzește la 21 de grade")
}
}
class Lights {
on(): void {
console.log("lumini: aprinse la 40%")
}
}
class CoffeeMachine {
brew(): void {
console.log("cafea: se prepară espresso")
}
}
// Fațada: o singură ușă simplă către întregul subsistem.
class House {
private heater = new Heater()
private lights = new Lights()
private coffee = new CoffeeMachine()
startDay(): void {
this.heater.on()
this.lights.on()
this.coffee.brew()
}
}
new House().startDay()
Când să îl folosești
Folosește-l când apelanții repetă mereu același dans în mai mulți pași cu un subsistem sau când vrei să expui o suprafață mică și stabilă peste una dezordonată ori în schimbare.
Renunță la el când „subsistemul” este o singură clasă cu trei metode. Un facade peste ceva deja simplu nu adaugă decât distanță.
Avantaje și dezavantaje
Avantaje: apelanții primesc un singur apel simplu; ordinea corectă există într-un singur loc; subsistemul se poate schimba în spatele unei fațade stabile.
Dezavantaje: facade-urile tind să crească până devin clase care fac totul; un facade care ascunde prea mult îi împinge pe oameni să îl ocolească.