🏛️Facade Pattern – Overview
🧠 Concept
The Facade Pattern provides a simple interface to a complex subsystem of classes. It hides the system’s complexity behind one unified entry point.
💡 Think of it like a hotel reception desk — instead of talking to housekeeping, kitchen, and maintenance separately, you just talk to the reception (facade), which coordinates everything for you.
🧱 Key Roles
Facade
Simplified interface that hides complex subsystem interactions.
Subsystem Classes
The actual components that perform the detailed work.
Client
Uses the Facade to interact with the system easily.
💻 Java Example – Report Generation System
// ----- Subsystems -----
class DataFetcher {
void fetchData() {
System.out.println("Fetching data from database...");
}
}
class DataFormatter {
void formatData() {
System.out.println("Formatting data into report structure...");
}
}
class ReportPrinter {
void printReport() {
System.out.println("Printing final report...");
}
}
// ----- Facade -----
class ReportGeneratorFacade {
private DataFetcher fetcher = new DataFetcher();
private DataFormatter formatter = new DataFormatter();
private ReportPrinter printer = new ReportPrinter();
public void generateReport() {
fetcher.fetchData();
formatter.formatData();
printer.printReport();
}
}
// ----- Client -----
public class Main {
public static void main(String[] args) {
ReportGeneratorFacade reportGenerator = new ReportGeneratorFacade();
reportGenerator.generateReport(); // Only one simple call!
}
}Output:
Fetching data from database...
Formatting data into report structure...
Printing final report...🧠 Flow Summary
1️⃣
Client calls generateReport()
Facade method triggered
2️⃣
Facade calls multiple subsystems
fetchData(), formatData(), printReport()
3️⃣
Subsystems execute tasks
Client never deals with them directly
✅
Client gets final result
Simpler, cleaner, and decoupled
🪜 Summary
Simplifies usage of complex systems by providing a single entry point.
Keeps the client decoupled from the internal subsystem classes.
Promotes cleaner architecture and reduces dependencies.
Easy to modify or replace subsystems behind the facade.
🧾 Real-world Analogy
🏨 Hotel Reception Desk
You (client) want food, cleaning, or maintenance.
You don’t call each department.
Instead, you contact reception (facade) — it coordinates the subsystems.
💡 The facade doesn’t change what subsystems do — it just simplifies how you access them.
🧭 TL;DR
Facade Pattern = One unified interface to a complex system. “Talk to one front desk instead of many departments.”
Last updated