Facades and proxies are design patterns that are similar. They both help to reduce the apparent complexity of a subsystem, by exposing a simpler interface.
The main goal of the facade pattern is to simplify the interface of a complete subsystem, while the proxy helps you enhance the capabilities of a particular interface. The client will only interact with the simple, exposed interface.
This yields multiple benefits, from separation of concerns to ease of use for clients. SDKs and third-party libraries often use facades and proxies in order to leverage their powerful capabilities, abstracting away the internal complexity.
In this section, we will show how to implement facades and proxies effectively, and demonstrate their capabilities and limits.