# Facade

## Intent

* Provide an unified interface to a set of interfaces in a subsystem. Façade defines a higher-level interface that makes the subsystem easier to use.

## Problem

* How can a simple interface be provided for a complex subsystem?
* How can tight coupling between clients and the objects in a subsystem be avoided?

## Solution

* Define a separate Facade object that provides an unified interface for a set of interfaces in a subsystem.
* Work through a façade to minimize dependencies on a subsystem.

## Advantages

✅ Decouples clients from a subsystem.\
✅ Decouples subsystems.\


## When to use

* A simple interface is required to access a complex system.
* A system is very complex or difficult to understand.
* When an entry point is needed to each level of layered software.
* When the abstractions and implementations of a subsystem are tightly coupled.

## Notes

* Logging functionality is a good example of façade design pattern. Example being, _Logback_ in java.
