為什么要使用Proxy?
1.授權(quán)機(jī)制不同級(jí)別的用戶對(duì)同一對(duì)象擁有不同的訪問權(quán)利,如Jive 論壇系統(tǒng)中,就使用Proxy 進(jìn)行授權(quán)機(jī)制控制,訪問論壇有兩種人:注冊(cè)用戶和游客(未注冊(cè)用戶),Jive 中就通過類似ForumProxy 這樣的代理來控制這兩種用戶對(duì)論壇的訪問權(quán)限。
2.某個(gè)客戶端不能直接操作到某個(gè)對(duì)象,但又必須和那個(gè)對(duì)象有所互動(dòng)。
舉例兩個(gè)具體情況:
(1)如果那個(gè)對(duì)象是一個(gè)是很大的圖片,需要花費(fèi)很長(zhǎng)時(shí)間才能顯示出來,那么當(dāng)這個(gè)圖片包含在文檔中時(shí),使用編輯器或?yàn)g覽器打開這個(gè)文檔,打開文檔必須很迅速,不能等待大圖片處理完成,這時(shí)需要做個(gè)圖片Proxy 來代替真正的圖片。
(2)如果那個(gè)對(duì)象在Internet 的某個(gè)遠(yuǎn)端服務(wù)器上,直接操作這個(gè)對(duì)象因?yàn)榫W(wǎng)絡(luò)速度原因可能比較慢,那我們可以先用Proxy 來代替那個(gè)對(duì)象。
總之原則是,對(duì)于開銷很大的對(duì)象,只有在使用它時(shí)才創(chuàng)建,這個(gè)原則可以為我們節(jié)省很多寶貴的Java 內(nèi)存,所以,有些人認(rèn)為Java 耗費(fèi)資源內(nèi)存,我以為這和程序編制思路也有一定的關(guān)系。
如何使用Proxy?
以Jive論壇系統(tǒng)為例,訪問論壇系統(tǒng)的用戶有多種類型:注冊(cè)普通用戶、論壇管理者、系統(tǒng)管理者、游客,注冊(cè)普通用戶才能發(fā)言;論壇管理者可以管理他被授權(quán)的論壇;系統(tǒng)管理者可以管理所有事務(wù)等,這些權(quán)限劃分和管理是使用Proxy 完成的。
Forum 是Jive 的核心接口,在Forum 中陳列了有關(guān)論壇操作的主要行為,如論壇名稱、論壇描述的獲取和修改,帖子發(fā)表刪除編輯等。
在ForumPermissions 中定義了各種級(jí)別權(quán)限的用戶:
public class ForumPermissions implements Cacheable {
/*** Permission to read object.*/
public static final int READ = 0;
/*** Permission to administer the entire sytem.*/
public static final int SYSTEM_ADMIN = 1;
/*** Permission to administer a particular forum.*/
public static final int FORUM_ADMIN = 2;
/*** Permission to administer a particular user.*/
public static final int USER_ADMIN = 3;
/*** Permission to administer a particular group.*/
public static final int GROUP_ADMIN = 4;
/*** Permission to moderate threads.*/
public static final int MODERATE_THREADS = 5;
/*** Permission to create a new thread.*/
public static final int CREATE_THREAD = 6;
/*** Permission to create a new message.*/
public static final int CREATE_MESSAGE = 7;
/*** Permission to moderate messages.*/
public static final int MODERATE_MESSAGES = 8;
.....
public boolean isSystemOrForumAdmin() {
return (values[FORUM_ADMIN] || values[SYSTEM_ADMIN]);
}
.....
}
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |