Facade (Structural)
Intent / problem it solves
Provide a unified higher-level interface to a set of interfaces in a subsystem, simplifying common workflows and reducing coupling for most clients.
When to use / when NOT
Use when a module exposes many small services; wrap frequent sequences (checkout, deploy, onboarding).
Avoid when it becomes a god object; keep facades thin and push logic down.
Structure
Facade coordinates subsystem classes; clients depend only on the facade for common paths.
Loading diagram…
Go example
package main
import "fmt"
type Inventory struct{}
func (Inventory) Reserve(sku string) bool { return sku != "" }
type Payment struct{}
func (Payment) Charge(amount int) bool { return amount > 0 }
type Shipping struct{}
func (Shipping) Schedule(address string) string { return "tracking-" + address }
type Storefront struct{}
func (Storefront) Buy(sku string, amount int, address string) (string, bool) {
if !Inventory{}.Reserve(sku) || !Payment{}.Charge(amount) {
return "", false
}
return Shipping{}.Schedule(address), true
}
func main() {
tracking, ok := Storefront{}.Buy("book", 20, "Main St")
fmt.Println(tracking, ok)
}JavaScript example
class AuthService {
signIn(credentials) {
return { token: `tok-${credentials.user}` };
}
}
class ProfileService {
loadProfile(token) {
return { token, name: 'Ada' };
}
}
class SessionFacade {
constructor(auth, profiles) {
this.auth = auth;
this.profiles = profiles;
}
openSession(credentials) {
const session = this.auth.signIn(credentials);
const profile = this.profiles.loadProfile(session.token);
return { session, profile };
}
}
const facade = new SessionFacade(new AuthService(), new ProfileService());
console.log(facade.openSession({ user: 'ada' }));Interview phrase
“Facade is my narrow entry point: it sequences inventory, payment, and shipping so the mobile app calls one method instead of three services.”
Related LLD case studies
Reference in LLD when a use case orchestrates multiple subsystems in LLD case studies.
Last updated on
Spotted something unclear or wrong on this page?