The Facade Pattern provides a simplified interface to a library, a framework, or any other complex set of classes for a client to make use of it. ![[Screenshot 2023-09-06 at 3.26.23 PM.png]] * The facade provides convenient access to a particular part of the subsystem's functionality. * Sometimes the facade can grow too big and become a God object. Therefore, an additional facade can be incorporated to avoid polluting a single facade with unrelated features. * The idea of a facade is providing a simple interface to the client, and if the code becomes too dependent on this class, that might make it another complex structure and no longer a "simple" object. * Subsystem classes are't aware of the facade's existence, they operate within the system and work with each other directly. * The client uses the facade instead of calling the subsystem objects directly. * The pattern improves the readability and usability of a software library by hiding the interactions of its components. * Facades can be used to define entry points to each level of a subsystem, thus decoupling multiple subsystems and forcing them to communicate only through facades.