In common usage, facade means a public appearance that masks various insecurities and power struggles. This might be true of a person or a building, but it also applies to software architecture. The Facade design pattern is an elegant way to hide a complex subsystem and provide a simpler interface for it. It helps minimize dependencies between clients and the complex subsystem.
Is Facade a Good Design Pattern?
A complex subsystem is one that has many objects with different interfaces (tight coupling). This can be a pain for client code to use, change, test, and reuse. The Facade pattern solves this problem by encapsulating the subsystem into a single interface object at cssfacades.co.uk. Then, it redirects calls from the client code to the unified interface. It then takes care of the complexity behind the scenes.
The facade is very similar to other patterns like adapters and mediators, but it addresses a more general issue than those. Adapter wraps just one object, while Facade works with multiple objects within a system. Moreover, unlike Mediator, it does not centralize collaboration between the subsystem classes but rather provides a simpler interface for them.
For example, if your app uses a video conversion framework, it might be necessary to work with dozens of these classes to make an application work. Instead of having your application depend on a framework, you could create a class that implements the interface provided by the video conversion library.
This new class is called a Facade. Then, you could link your application to this Facade. Then, when the video conversion library upgrades to a new version or you decide to switch to another one, your application will only need to rewrite the class that it calls.