c23种设计模式4外观模式Word文档格式.docx
《c23种设计模式4外观模式Word文档格式.docx》由会员分享,可在线阅读,更多相关《c23种设计模式4外观模式Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
ade模式,现在来考虑这样一个抵押系统,当有一个客户来时,有如下几件事情需要确认:
到银行子系统查询他是否有足够多的存款,到信用子系统查询他是否有良好的信用,到贷款子系统查询他有无贷款劣迹。
只有这三个子系统都通过时才可进行抵押。
我们先不考虑Faç
ade模式,那么客户程序就要直接访问这些子系统,分别进行判断。
类结构图下:
在这个程序中,我们首先要有一个顾客类,它是一个纯数据类,并无任何操作,示意代码:
1
//顾客类
2
public
class
Customer
3
{
4
private
string
_name;
5
6
Customer(string
name)
7
8
this._name
=
name;
9
}
10
11
Name
12
13
get
{
return
14
15
下面这三个类均是子系统类,示意代码:
//银行子系统
Bank
bool
HasSufficientSavings(Customer
c,
int
amount)
Console.WriteLine("
Check
bank
for
"
+
c.Name);
true;
//信用子系统
Credit
HasGoodCredit(Customer
c)
16
credit
17
18
19
20
21
//贷款子系统
22
Loan
23
24
HasNoBadLoans(Customer
25
26
loans
27
28
29
看客户程序的调用:
//客户程序
MainApp
const
_amount
12000;
static
void
Main()
Bank
new
Bank();
Loan
loan
Loan();
Credit
Credit();
Customer
customer
Customer("
Ann
McKinsey"
);
eligible
if
(!
bank.HasSufficientSavings(customer,
_amount))
false;
else
loan.HasNoBadLoans(customer))
credit.HasGoodCredit(customer))
\n"
customer.Name
has
been
(eligible
?
Approved"
:
Rejected"
));
30
Console.ReadLine();
31
32
可以看到,在不用Faç
ade模式的情况下,客户程序与三个子系统都发生了耦合,这种耦合使得客户程序依赖于子系统,当子系统化时,客户程序也将面临很多变化的挑战。
一个合情合理的设计就是为这些子系统创建一个统一的接口,这个接口简化了客户程序的判断操作。
看一下引入Faç
ade模式后的类结构图:
变
外观类Mortage的实现如下:
/外观类
Mortgage
IsEligible(Customer
cust,
{0}
applies
{1:
C}
loan\n"
cust.Name,
amount);
bank.HasSufficientSavings(cust,
amount))
loan.HasNoBadLoans(cust))
credit.HasGoodCredit(cust))
eligible;
顾客类和子系统类的实现仍然如下:
//信用证子系统
33
34
35
36
37
38
this.name
39
40
41
42
43
44
45
而此时客户程序的实现:
//客户程序类
//外观
Mortgage
mortgage
Mortgage();
eligable
mortgage.IsEligible(customer,
125000);
+
(eligable
可以看到引入Faç
ade模式后,客户程序只与Mortgage发生依赖,也就是Mortgage屏蔽了子系统之间的复杂的操作,达到了解耦内部子系统与客户程序之间的依赖。
.NET架构中的Faç
ade模式
Faç
ade模式在