Java的設計模式(三)
阿新 • • 發佈:2018-11-08
代理模式
代理模式為另一個物件提供一個替身或佔位符以控制對這個物件的訪問。
何為提供一個替身或佔位符?即一個物件代表另一個物件。有什麼事直接告訴代理物件,不必麻煩真正的物件,由代理物件來決定哪些事情去交給真正的物件。舉個例子,以前男女婚配,由男方家庭去拜託媒人,媒人轉告女方,此時媒人就是代理物件,真正物件時女方。媒人此時就控制了對真正物件的訪問。代理模式有許多變體,這些變體都與“控制訪問”的做法有關。如
- 遠端代理控制訪問遠端物件。
- 虛擬代理控制訪問建立開銷大的資源。
- 保護代理基於許可權控制對資源的訪問。
代理模式類圖
遠端代理
遠端代理適用於需要與遠端端,即不在同一個jvm環境下的物件互動。要實現遠端代理,步驟有點複雜。
其中,jdk5以後是可以跳過步驟三的,步驟三的功能已經交給動態代理去實現。其中,遠端類的實現結構
註冊相關程式碼與啟動註冊
客戶端連線的相關程式碼
虛擬代理
書中舉例建立一個cd封面,封面圖片由下載網路上的圖片得來,此封面建立過程開銷非常大,於是採用代理模式讓代理展示出“正在載入”這句話,等真正建立好圖片物件的時候,再顯示出圖片。代理物件擁有被代理的物件的引用。
保護代理(動態代理)
保護代理可以用來對被代理物件劃分許可權,決定被代理物件有哪些方法可以呼叫,哪些不可以。
類圖如下
其中,proxy是jdk給的,我們新增的程式碼只能在InvocationHandler中。你劃分了多少種不同的許可權,就需要建立多少種InvocationHandler。實現保護代理需要經過以下幾個步驟
- 建立InvocationHandler。決定許可權的關鍵程式碼
- 建立Proxy類並例項化Proxy物件