Net设计模式实例之代理模式(Proxy Pattern)
一、代理模式簡(jiǎn)介(Brief Introduction)
代理模式(Proxy Pattern)對(duì)其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)。
二、解決的問(wèn)題(What To Solve)
1、遠(yuǎn)程代理
遠(yuǎn)程代理,也就是為了一個(gè)對(duì)象在不同的地址空間提供局部代表。這樣可隱藏一個(gè)對(duì)象存在與不同地質(zhì)空間的事實(shí),隱藏對(duì)象所在的地址空間。
比如.Net Web Service ,當(dāng)一個(gè)項(xiàng)目在加入一個(gè)Web引用,引用Web Service的時(shí)候會(huì)在項(xiàng)目中生成一個(gè)WebReference文件夾和響應(yīng)的文件,這些文件夾和文件就是代理,?客戶端在調(diào)用此代理的時(shí)候?qū)嶋H上已經(jīng)解決了遠(yuǎn)程訪問(wèn)的問(wèn)題。
2、虛擬代理
虛擬代理,是根據(jù)需要?jiǎng)?chuàng)建開(kāi)銷很大的對(duì)象。通過(guò)它來(lái)存放實(shí)例化需要很長(zhǎng)時(shí)間的真實(shí)對(duì)象。這樣可以達(dá)到最優(yōu)化的性能。
比如瀏覽器使用代理模式優(yōu)化網(wǎng)頁(yè)下載,也就是首先展示網(wǎng)頁(yè)文字,圖片需要一張一張地下載后才能看到。
3、安全代理
安全代理,用來(lái)控制真實(shí)對(duì)象訪問(wèn)時(shí)的權(quán)限。一般用于對(duì)象應(yīng)該有不同的訪問(wèn)權(quán)限的時(shí)候。
4、智能指引
??????????????智能指引,是指當(dāng)調(diào)用真實(shí)的對(duì)象時(shí),代理處理另外一些事情。比如,在訪問(wèn)一個(gè)實(shí)際對(duì)象前,檢查是否已經(jīng)鎖定它,以確保其他對(duì)象不能改變它。也就是在訪問(wèn)一個(gè)對(duì)象時(shí)附加的一些內(nèi)務(wù)處理。
三、代理模式分析(Analysis)
1、代理模式結(jié)構(gòu)
???????
2、源代碼
| 1、抽象類?Subject |
| public?abstract?class?Subject { ????public??abstract?void?Request(); } |
?
| 2、真實(shí)實(shí)體RealSubject?繼承于Subject |
| public?class?RealSubject:Subject { ????public?override?void?Request() ????{ ????????Console.WriteLine("對(duì)象的真實(shí)實(shí)體方法在執(zhí)行。"); ????} } |
?
| 3、代理類Proxy?繼承于Subject類,同時(shí)引用RealSubject類 |
| public?class?Proxy:Subject { ????private?RealSubject?realSubject; ????public?override?void?Request() ????{ ????????Console.WriteLine("通過(guò)代理類訪問(wèn)對(duì)象真實(shí)實(shí)體的方法。"); ????????if?(realSubject ==?null) ????????{ ????????????realSubject =?new?RealSubject(); ????????} ????????realSubject.Request(); ????} } |
?
| 4、客戶端代碼 |
| class?Program { ????static?void?Main(string[] args) ????{ ????????Proxy?proxy =?new?Proxy(); ????????proxy.Request(); ????????Console.Read(); ????} } |
3、程序運(yùn)行結(jié)果
四.案例分析(Example)
五、總結(jié)(Summary)
代理模式(Proxy Pattern)對(duì)其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)。代理模式分為遠(yuǎn)程代理、虛擬代理、安全代理和智能指引。
本文轉(zhuǎn)自靈動(dòng)生活博客園博客,原文鏈接:http://www.cnblogs.com/ywqu/archive/2010/01/22/1653875.html?,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的Net设计模式实例之代理模式(Proxy Pattern)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 模块---常用模块
- 下一篇: POJ 1014 Dividing 背包