Facade pattern provides simpler way to users to access complex
subsystems. Facade pattern falls under structural pattern of GOF (Gang of Four)
patterns.
When to use –
Facade pattern can be used when you have to deal with
multiple classes having complex and difficult logic. Facade class acts as “wrapper” class and provides easy
to understand and simple to use interface to client. Facade object decouples
the subsystems from the client. Client doesn’t have information about how
subsystems objects are created and its methods are called in Facade class. Facade
class provides client a simpler way to access subsystems. Facade pattern can
also be used when you need entry point to multiple complex subsystems.
Facade pattern can also be ideal choice when you are dealing
with multiple legacy systems and you can’t change code of legacy systems due to
code unavailability or multiple systems are impacted by code change.
Major components of Facade Pattern –
Facade – This is a class and acts as wrapper for
delegating client request to respective subsystems.
Subsystems – This are subsystem classes which
contains functionality that client wants.
There are so many real world example available for Facade
pattern but most common example is Reception counter or “May I Help you”
counter at any company or bank. So client just need to contact to reception counter and he/she will be redirected
to respective department to get his/her work done. See below example of Facade
pattern.
Code –
//subsystem-1
public class SavingsAccount
{
public void
OpenNewAccount(string name)
{
Console.WriteLine(string.Format("{0},
welcome to savings account department", name));
}
}
//subsystem-2
public class CreditCard
{
public void
ApplyCreditCard(string name)
{
Console.WriteLine(string.Format("{0},
welcome to credit card department.", name));
}
}
//subsystem-3
public class PersonalLoan
{
public void
GetPersonalLoan(string name)
{
Console.WriteLine(string.Format("{0},
welcome to personal loan department", name));
}
}
//Facade
public class Reception
{
private string Name;
private SavingsAccount
savingsaccount = new SavingsAccount();
private CreditCard
creditCard = new CreditCard();
private PersonalLoan
personalLoan = new PersonalLoan();
public Reception(string name)
{
Name = name;
}
public void
GetPersonalLoan()
{
personalLoan.GetPersonalLoan(Name);
}
public void
ApplyForCreditCard()
{
creditCard.ApplyCreditCard(Name);
}
public void
OpenSavingsAccount()
{
savingsaccount.OpenNewAccount(Name);
}
}
//client
class Program
{
static void Main(string[] args)
{
Reception
reception = new Reception("Mitesh");
reception.OpenSavingsAccount();
reception.ApplyForCreditCard();
reception.GetPersonalLoan();
Console.ReadLine();
}
}
Output –
As you can see in above example, Reception class acts as Facade
(wrapper) class which is entry point for client to connect to multiple
subsystems for his/her different types of need like opening savings account, get
personal loan, apply for credit card etc.
I hope this article helps you to know more about Facade
Pattern. Please leave your feedback in comments section below.
References –
See Also –
Creational Patterns
|
Structural Patterns
|
Behavioral Patterns
|
|
||
|
|
|
|
|
|
|
|
|
|
|
No comments:
Post a Comment