Facade Design Pattern

 The Facade Design Pattern is a structural design pattern that provides a simplified interface to a complex system. It helps to hide the internal complexity of a system and present a simple interface to the client. The Facade Design Pattern is often used to provide a unified and easy-to-use interface to a large body of code, such as a class library.

The Facade Design Pattern is implemented by creating a facade class that provides a single, simple interface to a complex system. The facade class then delegates calls to the apropriate class or method in the complex system. This allows the client to interact with the complex system through the facade class, which makes the interaction easier and more intuitive.

To implement the Facade Design Pattern in Apex, you can create a class that serves as the facade. This class should have methods that provide a simplified interface to the complex system. For example, consider a library management system that has several classes for managing books, patrons, and loans. You can create a facade class that has methods for checking out a book, returning a book, and checking the availability of a book. These methods can then delegate the apropriate calls to the relevant classes in the library management system.

Here is an example of a simple Facade Design Pattern implementation in Apex:

/*
* @description: Facade design pattern
* @author: sfdc4u.com
*/
public class LibraryFacade {
    private BookManager bookManager;
    private PatronManager patronManager;
    private LoanManager loanManager;

    public LibraryFacade() {
        bookManager = new BookManager();
        patronManager = new PatronManager();
        loanManager = new LoanManager();
    }

    public void checkOutBook(String bookId, String patronId) {
        Book book = bookManager.getBook(bookId);
        Patron patron = patronManager.getPatron(patronId);
        loanManager.checkOutBook(book, patron);
    }

    public void returnBook(String bookId) {
        Book book = bookManager.getBook(bookId);
        loanManager.returnBook(book);
    }

    public boolean isBookAvailable(String bookId) {
        Book book = bookManager.getBook(bookId);
        return loanManager.isBookAvailable(book);
    }
}

 

In this example, the LibraryFacade class provides a simplified interface to the complex library management system. It has methods for checking out a book, returning a book, and checking the availability of a book. These methods delegate the apropriate calls to the BookManager, PatronManager, and LoanManager classes.

The client can then use the LibraryFacade class to interact with the library management system in a simple and intuitive way. For example:

LibraryFacade facade = new LibraryFacade();

facade.checkOutBook(‘123’, ‘456’);

facade.returnBook(‘123’);

boolean isAvailable = facade.isBookAvailable(‘123’);

The Facade Design Pattern is useful in situations where you have a complex system that you want to present a simplified interface to the client. It can help to reduce the complexity of the system and make it easier for the client to use. It is also a good way to provide a consistent and unified interface to a system that has many diferent components and classes.

One of the main benefits of the Facade Design Pattern is that it can help to decouple the client from the complex system. The client only needs to know about the facade class and does not need to be aware of the internal structure and workings of the complex system.

 

1 thought on “Facade Design Pattern”

Leave a Comment