Imagine a simplified mortgage application system where different subsystems handle credit checks, document verification, and approval processes. We can create a Facade to simplify the process for clients:
// Subsystem classes
class CreditChecker
{
public bool CheckCredit(string customerId)
{
// Simulated credit check logic
Console.WriteLine($"Credit check for customer {customerId} passed.");
return true;
}
}
class DocumentVerifier
{
public bool VerifyDocuments(string customerId)
{
// Simulated document verification logic
Console.WriteLine($"Documents for customer {customerId} verified.");
return true;
}
}
class ApprovalProcess
{
public void ProcessApproval(string customerId)
{
// Simulated approval process
Console.WriteLine($"Loan approved for customer {customerId}.");
}
}
// Facade class
class MortgageApplicationFacade
{
private CreditChecker creditChecker;
private DocumentVerifier documentVerifier;
private ApprovalProcess approvalProcess;
public MortgageApplicationFacade()
{
creditChecker = new CreditChecker();
documentVerifier = new DocumentVerifier();
approvalProcess = new ApprovalProcess();
}
public void ApplyForMortgage(string customerId)
{
Console.WriteLine($"Applying for mortgage for customer {customerId}:");
if (creditChecker.CheckCredit(customerId) && documentVerifier.VerifyDocuments(customerId))
{
approvalProcess.ProcessApproval(customerId);
}
else
{
Console.WriteLine($"Mortgage application for customer {customerId} declined.");
}
}
}
// Client code
class Program
{
static void Main(string[] args)
{
MortgageApplicationFacade mortgageFacade = new MortgageApplicationFacade();
// Client applies for mortgage
mortgageFacade.ApplyForMortgage("1234567890");
}
}