The Facade (structural) software design pattern provides an abstraction layer that has a simplified interface to use and communicate with underlying subsystems.
It solves multiple problems:
- Effort: When complex subsystems are used often together in a comparative, not-so-different-way, then re-implementing the same logic often violates the DRY principle
- Flexibility: The interface of the facade is in your control, the subsystems that the facade abstracts may not be (think third party libraries or service). Injecting this tier in between ensures no hard-coupling is done (which would violate parts of the SOLID principle)