Comments
Create manager/facade class to handle calculations from passed in object i.e. Person/Customer
Code
1. using System;
2.
3. namespace DoFactory.GangOfFour.Facade.RealWorld
4. {
5. ///
6. /// MainApp startup class for Real-World
7. /// Facade Design Pattern.
8. ///
9. class MainApp
10. {
11. ///
12. /// Entry point into console application.
13. ///
14. static void Main()
15. {
16. // Facade
17. Mortgage mortgage = new Mortgage();
18.
19. // Evaluate mortgage eligibility for customer
20. Customer customer = new Customer("Ann McKinsey");
21. bool eligible = mortgage.IsEligible(customer, 125000);
22.
23. Console.WriteLine("\n" + customer.Name +
24. " has been " + (eligible ? "Approved" : "Rejected"));
25.
26. // Wait for user
27. Console.ReadKey();
28. }
29. }
30.
31. ///
32. /// The 'Subsystem ClassA' class
33. ///
34. class Bank
35. {
36. public bool HasSufficientSavings(Customer c, int amount)
37. {
38. Console.WriteLine("Check bank for " + c.Name);
39. return true;
40. }
41. }
42.
43. ///
44. /// The 'Subsystem ClassB' class
45. ///
46. class Credit
47. {
48. public bool HasGoodCredit(Customer c)
49. {
50. Console.WriteLine("Check credit for " + c.Name);
51. return true;
52. }
53. }
54.
55. ///
56. /// The 'Subsystem ClassC' class
57. ///
58. class Loan
59. {
60. public bool HasNoBadLoans(Customer c)
61. {
62. Console.WriteLine("Check loans for " + c.Name);
63. return true;
64. }
65. }
66.
67. ///
68. /// Customer class
69. ///
70. class Customer
71. {
72. private string _name;
73.
74. // Constructor
75. public Customer(string name)
76. {
77. this._name = name;
78. }
79.
80. // Gets the name
81. public string Name
82. {
83. get { return _name; }
84. }
85. }
86.
87. ///
88. /// The 'Facade' class
89. ///
90. class Mortgage
91. {
92. private Bank _bank = new Bank();
93. private Loan _loan = new Loan();
94. private Credit _credit = new Credit();
95.
96. public bool IsEligible(Customer cust, int amount)
97. {
98. Console.WriteLine("{0} applies for {1:C} loan\n",
99. cust.Name, amount);
100.
101. bool eligible = true;
102.
103. // Check creditworthyness of applicant
104. if (!_bank.HasSufficientSavings(cust, amount))
105. {
106. eligible = false;
107. }
108. else if (!_loan.HasNoBadLoans(cust))
109. {
110. eligible = false;
111. }
112. else if (!_credit.HasGoodCredit(cust))
113. {
114. eligible = false;
115. }
116.
117. return eligible;
118. }
119. }
120. }
Ann McKinsey applies for $125,000.00 loan
Check bank for Ann McKinsey
Check loans for Ann McKinsey
Check credit for Ann McKinsey
Ann McKinsey has been Approved