Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use.
- Minimizes complexity of sub-systems
- Aids principle of loose coupling
- Software becomes more flexible and easily expandable
- Complex implementation (especially with existing code)
- Approach is coupled to an additional level of indirection
- High degree of dependence at facade interface