A Unified Interface

Reduce software complexity by minimizing the communication and dependencies between subsystems.  By interposing a Facade object between low-level objects and their clients, you can control what the clients can do and how the low-level objects can respond.  This helps to maintain high-level abstraction when applying the Single Responsibility Principle.  The clients will have no knowledge that functionality has been encapsulated within smaller objects, each having only one responsibility.  The functions represented by the facade can be implemented across numerous objects without the clients ever knowing.

Clients can be further decoupled from the subsystems by making the façade an abstract class with concrete subclasses.  This will allow for different implementations of the subsystems and enable the clients to interact with the low-level objects through an interface of the abstract façade class without ever knowing which implementations are used.

;