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.
- Need to provide a simple interface to a complex system
- Need to decouple a subsystem from its clients
- Need to provide an interface to a software layer
- Shields clients from subsystem components
- Promotes weak coupling between the subsystem and its clients
- Facade doesn't prevent clients from using subsystem classes if they need to