Pattern - Facade
Published: 2023-02-06 20:27:26

![Pattern facade](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xtq3638weia8acxrprfq.png)



The Facade design pattern was introduced as part of the Gang of Four Design Patterns book, published in 1994. The book is considered a landmark in the software development community and presents several common design patterns used in systems programming.

The Facade pattern is a software design pattern that provides a simplified interface to a complex system, hiding its complexity and allowing customers to interact with it more easily and clearly. It acts as a facade or "friendly face" for the underlying system, providing a set of simplified methods that can be called by clients rather than dealing directly with the complexity of the system. This pattern is useful for increasing the cohesiveness and clarity of the code, as well as making the system easier to maintain and evolve.

- You can use the Facade pattern in many scenarios where you have a complex system that needs to be simplified so that customers can interact with it more easily and clearly. Some examples include:
- Library systems: where you have a series of classes and related components that need to be simplified so that clients can use them efficiently.
- Applications with multiple subsystems: where you have multiple complex subsystems that need to be more simply put together so that customers can interact with them more easily.
- Database systems: where you have a series of complex operations that need to be simplified so that customers can perform common operations such as inserting, querying and removing data in an easier way.
- Interaction with APIs: where you have a complex API that needs to be simplified so that customers can interact with it more easily.

The Facade pattern can be applied in many other scenarios besides these, and its use will depend on your specific needs.


Below is a simple code example using the Composer pattern.

```js

class SystemA {
   operationA() {
     console.log('Operation A');
   }
}

class SystemB {
   operationB() {
     console.log('Operation B');
   }
}

class Facade {
   constructor() {
     this.systemA = new SystemA();
     this.systemB = new SystemB();
   }

   operation() {
     console.log('Facade Operation');
     this.systemA.operationA();
     this.systemB.operationB();
   }
}

const facade = new Facade();
facade.operation();
// Exit:
// Facade Operation
// Operation A
// Operation B

```

We have two classes SystemA and SystemB that represent two complex systems. Each has a method that represents a specific operation.

We have a Facade class that provides a simplified interface to these systems. It has a constructor that instantiates objects of the SystemA and SystemB classes, hiding its complexity.

The Facade class has an operation method that groups the systems operations and provides a simplified interface for the client. This method invokes the operationA and operationB methods of the SystemA and SystemB classes, respectively.

Finally, we have an instance of the Facade class called facade which is used to invoke the operation method. This causes it to print in the output: "Facade Operation", "Operation A", and "Operation B".

The purpose of this code is to hide the complexity of the SystemA and SystemB systems and provide a simplified interface for the client through the Facade class.

_Simple, right?_

The Facade design pattern is useful in situations where:

- There is a complex system that is difficult for the customer to understand or use due to its large number of classes, interfaces and dependencies.
- You need to simplify the interface of a complex system to make it easier for customers to use.
- You want to hide the internal complexity of a system from your customers, making it easier to maintain and evolve.
- You want to modularize the system into smaller pieces that are easier to understand and test.
- You need to integrate several different systems into a single point of entry.

In summary, the Facade pattern is useful when you need to provide a simplified interface to a complex system, making it easier to use and maintain.

**Conclusion**

The Facade design pattern is a software architecture pattern that provides a simplified interface to a complex system. It hides the system's internal complexity and provides a single interface to the client, making it easier to use and maintain.


Hope this helps, until next time.