所謂代理,就是一個人或者一個機構代表另一個人或者另一個機構采取行動。在一些情況下,一個客戶不想或者不能夠直接引用一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。
代理(Proxy)模式給某一個對象提供一個代理,并由代理對象控制對原對象的引用。
一,結構
?
?
?
?
?
?
?
?
?
?
?
?
?
?
抽象主題角色(Subject): 聲明了真實主題和代理主題的共同接口,這樣一來在任何使用真實主題的地方都可以使用代理主題。
代理主題(Proxy)角色: 代理主題角色內部含有對真是主題的引用,從而可以在任何時候操作真實主題對象;代理主題角色提供一個與真實主題角色相同的接口,以便可以在任何時候都可以替代真實主體;控制真實主題的應用,負責在需要的時候創建真實主題對象(和刪除真實主題對象);代理角色通常在將客戶端調用傳遞給真實的主題之前或之后,都要執行某個操作,而不是單純的將調用傳遞給真實主題對象。
真實主題角色(RealSubject)角色: 定義了代理角色所代表的真實對象。
二,示例代碼
package com.oa.interceptor; /** * 抽象主題角色 * @author Salmon * */ public interface Subject { public void Request(); } /** * 真實主題角色 * @author Salmon * */ public class RealSubject implements Subject { public void Request() { System.out.println("Called RealSubject.Request()"); } } /** * 代理主題角色 * @author Salmon * */ public class Proxy implements Subject { private RealSubject realSubject; public void Request() { if(realSubject == null) realSubject = new RealSubject(); preRequest(); realSubject.Request(); postRequest(); } private void preRequest() { System.out.println("PreRequest."); } private void postRequest() { System.out.println("PostRequest."); } } /** * 客戶端調用 * @author Salmon * */ public class Client { public static void main(String[] args) { Proxy p = new Proxy(); p.Request(); } }
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
