⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proxypattern.htm

📁 DesignPattern基于Java方面最好的书
💻 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>Proxy 模式(一)</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:&nbsp;Proxy 模式(一)</a></h1>



在 <a href="GoF.htm">Gof 的书</a>中对Proxy模式的目的给定为:为其它的物件提供一种代理,以控制对这个物件的访问。由这句话所延伸出来的意思是,根据您的目的不同,您的代理物件将负有不同的责任,因为产生多种不同的代理情况。<br>
<br>
根据不同的代理目的,而有不同的代理情况,在Gof中所举的一个例子是Virtual
Proxy,当中举一个文档中内嵌图片的例子,假设您的图片是在文档分页的后面,一开始您并不用直接载入图片,而使用一个虚代理物件,代替图片被载入,以
求开启一个文档的时候,速度能够加快。当您卷动文档至该显示图片的页数时,这时再载入图片。<br>

<div style="text-align: center;"><img style="width: 369px; height: 246px;" alt="Proxy" title="Proxy" src="images/proxy-1.jpg"><br>
</div>
<br>
如上图所示,当文档被开启时,ImageProxy物件代理Image物件被载入,在还没卷动至图片显示处时,也就是还没有调用
ImageProxy的draw()时,图片并不会被载入,因而可以加速文档的开启与节省记忆体的使用;如果需要显示图片了,ImageProxy的
draw()会被调用,而这时才真正创建Image物件,以从硬碟中载入图片。<br>
<br>
Proxy模式的 UML 结构图如下所示:<br>
<div style="text-align: center;"><img style="width: 330px; height: 237px;" alt="Proxy" title="Proxy" src="images/proxy-2.jpg"><br>
</div>
<br>
在调用RealSubject的request()之前,Proxy物件也许会有一些预先处理的操作,就假设我们组织为preOperation()与 postOperation()好了,当客户对Proxy发出request()请求后,一个可能的时序图如下所示:<br>
<div style="text-align: center;"><img style="width: 321px; height: 350px;" alt="Proxy" title="Proxy" src="images/proxy-3.jpg"><br>
</div>
<br>
您的preOperation()与postOperation()正决定了Proxy模式使用于何种情况,例如一个Remote
Proxy的情况,可以为一个远端真实物件提供一个局部代表;Protection
Proxy控制对物件的访问,您可以使用它来作不同级别、权限的存取控制;Cache
Proxy为一个物件提供临时的储存,使得许多客户端都能直接存取它,而不用对真实物件直接要求,只有在必要的时候更新这个临时物件,或是让客户直接存取
真实物件。<br>
<br>
<br>



</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -