Facade Design Pattern

By Peter Bromberg

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.

using System;

namespace Patterns
{

class MainApp
{

static void Main()
{
// Facade
Mortgage mortgage =
new Mortgage();

// Evaluate mortgage eligibility for customer
Customer customer =
new Customer { Name = "Ann McKinsey" };
bool eligible = mortgage.IsEligible(customer, 125000);

Console.WriteLine("\n" + customer.Name +
" has been " + (eligible ? "Approved" : "Rejected"));

// Wait for user
Console.ReadKey();
}
}

/// <summary>
/// The 'Subsystem ClassA' class
/// </summary>
class Bank
{
public bool HasSufficientSavings(Customer c, int amount)
{
Console.WriteLine("Check bank for " + c.Name);
return true;
}
}

/// <summary>
/// The 'Subsystem ClassB' class
/// </summary>
class Credit
{
public bool HasGoodCredit(Customer c)
{
Console.WriteLine("Check credit for " + c.Name);
return true;
}
}

/// <summary>
/// The 'Subsystem ClassC' class
/// </summary>
class Loan
{
public bool HasNoBadLoans(Customer c)
{
Console.WriteLine("Check loans for " + c.Name);
return true;
}
}

/// <summary>
/// The 'Facade' class
/// </summary>
class Mortgage
{
private Bank _bank = new Bank();
private Loan _loan = new Loan();
private Credit _credit = new Credit();

public bool IsEligible(Customer cust, int amount)
{
Console.WriteLine("{0} applies for {1:C} loan\n",
cust.
Name, amount);

bool eligible = true;

// Check creditworthyness of applicant
if (!_bank.HasSufficientSavings(cust, amount))
{
eligible =
false;
}
else if (!_loan.HasNoBadLoans(cust))
{
eligible =
false;
}
else if (!_credit.HasGoodCredit(cust))
{
eligible =
false;
}

return eligible;
}
}

/// <summary>
/// Customer class
/// </summary>
class Customer
{
// Gets or sets the name
public string Name { get; set; }
}
}

Facade Design Pattern  (623 Views)