public static void Main()
double downPayment = 50000;
double appraisedValue = 250000.00;
double loanAmount = appraisedValue - downPayment;
Conventional conventional = new Conventional("Conventional");
conventional.setDownPayment(downPayment);
conventional.LoanAmount = loanAmount;
conventional.AppraisedValue = appraisedValue;
Console.WriteLine("LTV is: {0}", conventional.calculateLTV());
Console.WriteLine("{0} Mortgage Insurance is {1}", conventional.program, conventional.calculateMortgageInsurance());
appraisedValue = 250000.00;
loanAmount = appraisedValue - downPayment;
FHA fha = new FHA("FHA");
fha.setDownPayment(downPayment);
fha.LoanAmount = loanAmount;
fha.AppraisedValue = appraisedValue;
Console.WriteLine("LTV is: {0}", fha.calculateLTV());
Console.WriteLine("{0} Mortgage Insurance is {1}", fha.program, fha.calculateMortgageInsurance());
interface IRequireDownPaymentBehavior
void setDownPayment(double downPayment);
double calculateMortgageInsurance();
public abstract class Loan
private double loanAmount;
private double appraisedValue;
public Loan(string program)
public double LoanAmount { get; set; }
public double AppraisedValue { get; set; }
public double calculateLTV()
return (LoanAmount / AppraisedValue) * 100;
public class Conventional : Loan, IRequireDownPaymentBehavior
private double downPayment;
const double requiredMortgageInsuranceConventional = 1.5;
public Conventional(string program) : base(program)
public void setDownPayment(double downPayment) {
this.downPayment = downPayment;
public double calculateMortgageInsurance()
double mortgageInsurancePercentage;
if (calculateLTV() > 80) {
mortgageInsurancePercentage = requiredMortgageInsuranceConventional;
mortgageInsurancePercentage = 0;
return (mortgageInsurancePercentage * ((1 / 100.00) * LoanAmount));
public class FHA : Loan, IRequireDownPaymentBehavior
private double downPayment;
const double requiredMortgageInsuranceFHA = 1.0;
public FHA(string program) : base(program)
public void setDownPayment(double downPayment) {
this.downPayment = downPayment;
public double calculateMortgageInsurance()
return (requiredMortgageInsuranceFHA * ((1 / 100.00) * LoanAmount));
public VA(string program) : base(program)