📄 facadepattern.htm
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="css/stdlayout.css" type="text/css">
<link rel="stylesheet" href="css/print.css" type="text/css">
<meta content="text/html; charset=gb2312" http-equiv="content-type">
<title>Facade 模式</title>
</head>
<body>
<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>
<h1><a href="CppGossip.html">Design Pattern: Facade 模式</a></h1>
考虑您要撰写一个Web
Mail程式,您手上已经有一些已经开发好的元件(Component),像是开发Web
Mail所需要的SMTP处理类、允许上传附档的FileUpload类,以及Web安全相关的API、其它相关的Package等等。<br>
<br>
当您拿到一些现成的元件,并打算在您的应用程式中使用它们的话,您不应该直接将这些元件耦合至您的应用程式上,例如:<br>
<img title="Facade" src="images/facade-1.jpg" alt="Facade" style="border: 0px solid ; width: 444px; height: 255px;"><br>
<br>
上面的作法会让您的应用程式直接与多个元件耦合,这种作法不但与元件的依赖度高,日后要修改应用程式本身,或是更换掉依赖的元件都有困难。<br>
<br>
您应该定义一个Facade介面,在当中定义好商务逻辑,例如寄送附件档案的方法(method),然后在一个实现类中,组合您手边的元件,使其达成您所
希望的商务行为,例如:<br>
<img title="Facade" src="images/facade-2.jpg" alt="Facade" style="border: 0px solid ; width: 491px; height: 382px;"><br>
<br>
如上图所示的,您的应用程式本身将不直接依赖于您的元件,而是依赖一个介面,当您想要更改某个商务行为的实作时,只要修改实现的类就可以了,应用程式本身
不用作任何修改。<br>
<br>
Facade模式的结构如下:<br>
<img style="border: 0px solid ; width: 491px; height: 377px;" src="images/facade-3.jpg" alt="Facade" title="Facade" onload="javascript:if(this.width>screen.width-250) this.width=screen.width-250" oncontextmenu="javascript:window.open('http://www.caterpillar.onlyfun.net/PmWiki/pub/uploads/DesignPattern/facade-3.jpg'); window.event.returnValue=false;"><br>
<br>
Facade模式隐藏了各个元件之间的合作行为,以及元件本身的操作与设定细节,固而必失去了一些直接操作元件的方便性,所以对于喜欢追求
与操作细节的程式设计人员而言,不会很喜欢透过Facade来操作背后的元件,所以您的Facade介面设计,通常要在元件依赖性及元件的支接操作性之间
作个平衡。<br>
<br>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -