近來很忙,一直沒寫 blog 了,今天晚上有點(diǎn)時(shí)間,聽了節(jié) MSDN 上面的一節(jié) webCast ,講的就是 Proxy 模式,本就就是這節(jié)課的筆記。
學(xué)習(xí)設(shè)計(jì)模式也有段時(shí)間了,很早也見過 Proxy 模式的,記得最開始接觸 Proxy 模式還是在著名的 JIVE 論壇( JIVE 中用 Proxy 來做權(quán)限控制)。今天算是一遍復(fù)習(xí)吧。
對復(fù)雜的軟件系統(tǒng),人們常常用的一種處理手法是在系統(tǒng)增加一層間接層,得到對系統(tǒng)靈活的、滿足特殊要求的解決方案。
使用 Proxy 模式的動(dòng)機(jī):在 OO 的開發(fā)過程中,某些對象的開銷很大(如: new 的開銷大、某些對象因?yàn)榘踩脑虿荒鼙豢蛻糁苯拥恼{(diào)用等),如果直接操作這些對象會(huì)破壞系統(tǒng)結(jié)構(gòu)。那么,我們就用代理對象來控制對象的訪問。
例子,??
一個(gè)常見的
HR
系統(tǒng):














































現(xiàn)在要求把
Employee
做成
webService
,
HR
系統(tǒng)通過
webService
來調(diào)用
Employee
對象,代碼修改如下:


























































































Proxy 使用的要點(diǎn):
1 、“增加一層間接層”,是軟件系統(tǒng)中常用的手段之一。
2 、具體的實(shí)現(xiàn)中, Proxy 有很大差別,有的是簡單的“ copy-on-write ”,有的是對組件模塊的抽象代理。在 JAVA 中常見的 SSH 架構(gòu)模式中( struts+spring+hibernate )中,我們可以把 spring 所在的服務(wù)層看成對 hiberate 的代理。
具體的實(shí)現(xiàn)可以參考 .NET 中的 WebService 的實(shí)現(xiàn)。
Copy-on-write
技術(shù)
















sb1.replace("H","L"); 系統(tǒng)做的動(dòng)作是, sb1 的代理對象先拷貝 ”Hello” 字符串,然后用“ L ”替換“ H ”, sb1 的代理對象重新指向新的對象。