Facade Pattern
This design pattern is extremely simple and used many a times. This pattern is followed if you want to create a simplified interface that performs many other actions behind the scenes.
Definition
Provide a unified interface to a set of interfaces in a subsystem. Façade defines a higher-level interface that makes the subsystem easier to use.
Watch the below video by Mike Abyss to understand this pattern :
participants
The classes and/or objects participating in this pattern are:
- Facade (MortgageApplication)
- knows which subsystem classes are responsible for a request.
- delegates client requests to appropriate subsystem objects.
- Subsystem classes (Bank, Credit, Loan)
- Implement subsystem functionality.
- Handle work assigned by the Facade object.
- Have no knowledge of the facade and keep no reference to it.
</pre> // Facade pattern -- Structural example using System; namespace DoFactory.GangOfFour.Facade.Structural { /// <summary> /// MainApp startup class for Structural /// Facade Design Pattern. /// </summary> class MainApp { /// <summary> /// Entry point into console application. /// </summary> public static void Main() { Facade facade = new Facade(); facade.MethodA(); facade.MethodB(); // Wait for user Console.ReadKey(); } } /// <summary> /// The 'Subsystem ClassA' class /// </summary> class SubSystemOne { public void MethodOne() { Console.WriteLine(" SubSystemOne Method"); } } /// <summary> /// The 'Subsystem ClassB' class /// </summary> class SubSystemTwo { public void MethodTwo() { Console.WriteLine(" SubSystemTwo Method"); } } /// <summary> /// The 'Subsystem ClassC' class /// </summary> class SubSystemThree { public void MethodThree() { Console.WriteLine(" SubSystemThree Method"); } } /// <summary> /// The 'Subsystem ClassD' class /// </summary> class SubSystemFour { public void MethodFour() { Console.WriteLine(" SubSystemFour Method"); } } /// <summary> /// The 'Facade' class /// </summary> class Facade { private SubSystemOne _one; private SubSystemTwo _two; private SubSystemThree _three; private SubSystemFour _four; public Facade() { _one = new SubSystemOne(); _two = new SubSystemTwo(); _three = new SubSystemThree(); _four = new SubSystemFour(); } public void MethodA() { Console.WriteLine("\nMethodA() ---- "); _one.MethodOne(); _two.MethodTwo(); _four.MethodFour(); } public void MethodB() { Console.WriteLine("\nMethodB() ---- "); _two.MethodTwo(); _three.MethodThree(); } } }
Output:
MethodA() —-
SubSystemOne Method
SubSystemTwo Method
SubSystemFour Method
MethodB() —-
SubSystemTwo Method
SubSystemThree Method
In real world
- SubSystemOne – Bank
- SubSystemTwo – Loan
- SubSystemThree – Credit
- Facade – Mortgage
Advertisements