日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java設計模式之Proxy(代理)

瀏覽:45日期:2024-06-30 13:17:18
內容: 理解并使用設計模式,能夠培養我們良好的面向對象編程習慣,同時在實際應用中,可以如魚得水,享受游刃有余的樂趣.Proxy是比較有用途的一種模式,而且變種較多,應用場合覆蓋從小結構到整個系統的大結構,Proxy是代理的意思,我們也許有代理服務器等概念,代理概念可以解釋為:在出發點到目的地之間有一道中間層,意為代理.設計模式中定義: 為其他對象提供一種代理以控制對這個對象的訪問.為什么要使用Proxy?1.授權機制 不同級別的用戶對同一對象擁有不同的訪問權利,如Jive論壇系統中,就使用Proxy進行授權機制控制,訪問論壇有兩種人:注冊用戶和游客(未注冊用戶),Jive中就通過類似ForumProxy這樣的代理來控制這兩種用戶對論壇的訪問權限.2.某個客戶端不能直接操作到某個對象,但又必須和那個對象有所互動.舉例兩個具體情況: (1)如果那個對象是一個是很大的圖片,需要花費很長時間才能顯示出來,那么當這個圖片包含在文檔中時,使用編輯器或瀏覽器打開這個文檔,打開文檔必須很迅速,不能等待大圖片處理完成,這時需要做個圖片Proxy來代替真正的圖片.(2)如果那個對象在Internet的某個遠端服務器上,直接操作這個對象因為網絡速度原因可能比較慢,那我們可以先用Proxy來代替那個對象.總之原則是,對于開銷很大的對象,只有在使用它時才創建,這個原則可以為我們節省很多寶貴的Java內存. 所以,有些人認為Java耗費資源內存,我以為這和程序編制思路也有一定的關系.如何使用Proxy?以Jive論壇系統為例,訪問論壇系統的用戶有多種類型:注冊普通用戶 論壇管理者 系統管理者 游客,注冊普通用戶才能發言;論壇管理者可以管理他被授權的論壇;系統管理者可以管理所有事務等,這些權限劃分和管理是使用Proxy完成的.Forum是Jive的核心接口,在Forum中陳列了有關論壇操作的主要行為,如論壇名稱 論壇描述的獲取和修改,帖子發表刪除編輯等.在ForumPermissions中定義了各種級別權限的用戶: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]);}.....} 因此,Forum中各種操作權限是和ForumPermissions定義的用戶級別有關系的,作為接口Forum的實現:ForumProxy正是將這種對應關系聯系起來.比如,修改Forum的名稱,只有論壇管理者或系統管理者可以修改,代碼如下:public class ForumProxy implements Forum {private ForumPermissions permissions;private Forum forum; this.authorization = authorization; public ForumProxy(Forum forum, Authorization authorization,ForumPermissions permissions){this.forum = forum;this.authorization = authorization;this.permissions = permissions;}.....public void setName(String name) throws UnauthorizedException,ForumAlreadyExistsException{//只有是系統或論壇管理者才可以修改名稱if (permissions.isSystemOrForumAdmin()) {forum.setName(name);}else {throw new UnauthorizedException();}}...} 而DbForum才是接口Forum的真正實現,以修改論壇名稱為例:public class DbForum implements Forum, Cacheable {...public void setName(String name) throws ForumAlreadyExistsException {....this.name = name;//這里真正將新名稱保存到數據庫中 saveToDb();....}... } 凡是涉及到對論壇名稱修改這一事件,其他程序都首先得和ForumProxy打交道,由ForumProxy決定是否有權限做某一樣事情,ForumProxy是個名副其實的'網關','安全代理系統'.在平時應用中,無可避免總要涉及到系統的授權或安全體系,不管你有無意識的使用Proxy,實際你已經在使用Proxy了.我們繼續結合Jive談入深一點,下面要涉及到工廠模式了,如果你不了解工廠模式,請看我的另外一篇文章:設計模式之Factory我們已經知道,使用Forum需要通過ForumProxy,Jive中創建一個Forum是使用Factory模式,有一個總的抽象類ForumFactory,在這個抽象類中,調用ForumFactory是通過getInstance()方法實現,這里使用了Singleton(也是設計模式之一,由于介紹文章很多,我就不寫了,看這里),getInstance()返回的是ForumFactoryProxy.為什么不返回ForumFactory,而返回ForumFactory的實現ForumFactoryProxy?原因是明顯的,需要通過代理確定是否有權限創建forum.在ForumFactoryProxy中我們看到代碼如下:public class ForumFactoryProxy extends ForumFactory { protected ForumFactory factory;protected Authorization authorization;protected ForumPermissions permissions;public ForumFactoryProxy(Authorization authorization, ForumFactory factory,ForumPermissions permissions){this.factory = factory;this.authorization = authorization;this.permissions = permissions;}public Forum createForum(String name, String description)throws UnauthorizedException, ForumAlreadyExistsException{//只有系統管理者才可以創建forum if (permissions.get(ForumPermissions.SYSTEM_ADMIN)) {Forum newForum = factory.createForum(name, description);return new ForumProxy(newForum, authorization, permissions);}else {throw new UnauthorizedException();}} 方法createForum返回的也是ForumProxy, Proxy就象一道墻,其他程序只能和Proxy交互操作.注意到這里有兩個Proxy:ForumProxy和ForumFactoryProxy. 代表兩個不同的職責:使用Forum和創建Forum;至于為什么將使用對象和創建對象分開,這也是為什么使用Factory模式的原因所在:是為了'封裝' '分派';換句話說,盡可能功能單一化,方便維護修改.Jive論壇系統中其他如帖子的創建和使用,都是按照Forum這個思路而來的.以上我們討論了如何使用Proxy進行授權機制的訪問,Proxy還可以對用戶隱藏另外一種稱為copy-on-write的優化方式.拷貝一個龐大而復雜的對象是一個開銷很大的操作,如果拷貝過程中,沒有對原來的對象有所修改,那么這樣的拷貝開銷就沒有必要.用代理延遲這一拷貝過程.比如:我們有一個很大的Collection,具體如hashtable,有很多客戶端會并發同時訪問它.其中一個特別的客戶端要進行連續的數據獲取,此時要求其他客戶端不能再向hashtable中增加或刪除 東東.最直接的解決方案是:使用collection的lock,讓這特別的客戶端獲得這個lock,進行連續的數據獲取,然后再釋放lock.public void foFetches(Hashtable ht){synchronized(ht){//具體的連續數據獲取動作.. } }但是這一辦法可能鎖住Collection會很長時間,這段時間,其他客戶端就不能訪問該Collection了.第二個解決方案是clone這個Collection,然后讓連續的數據獲取針對clone出來的那個Collection操作.這個方案前提是,這個Collection是可clone的,而且必須有提供深度clone的方法.Hashtable就提供了對自己的clone方法,但不是Key和value對象的clone,關于Clone含義可以參考專門文章.public void foFetches(Hashtable ht){Hashttable newht=(Hashtable)ht.clone();}問題又來了,由于是針對clone出來的對象操作,如果原來的母體被其他客戶端操作修改了, 那么對clone出來的對象操作就沒有意義了.最后解決方案:我們可以等其他客戶端修改完成后再進行clone,也就是說,這個特別的客戶端先通過調用一個叫clone的方法來進行一系列數據獲取操作.但實際上沒有真正的進行對象拷貝,直至有其他客戶端修改了這個對象Collection.使用Proxy實現這個方案.這就是copy-on-write操作.Proxy應用范圍很廣,現在流行的分布計算方式RMI和Corba等都是Proxy模式的應用.更多Proxy應用,見http://www.research.umbc.edu/~tarr/cs491/lectures/Proxy.pdfSun公司的 Explore the Dynamic Proxy API Dynamic Proxy Classes Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
免费成人在线观看| 欧美激情国产在线| 国产精品xx| 乱一区二区av| 中文字幕人成乱码在线观看| 欧美日韩 国产精品| av日韩中文| sm捆绑调教国产免费网站在线观看| 成人精品高清在线视频| 国产偷自视频区视频一区二区| 午夜久久福利| 国产欧美另类| 亚洲播播91| 黄色av日韩| 美女国产一区| 精品美女在线视频| 日韩视频在线一区二区三区| 99成人在线视频| 久久精品99国产精品| 久久成人av| 欧美成人高清| 国产精品一区二区精品视频观看| 国产精品久久国产愉拍| 日韩免费视频| 国产探花在线精品一区二区| 老司机精品视频网| 激情久久久久久久| 国产精品久久久久蜜臀| 欧美不卡在线| 日本欧美在线| 亚洲欧美日韩专区| 国产日韩高清一区二区三区在线| 欧美www视频在线观看| 日韩 欧美一区二区三区| 麻豆成全视频免费观看在线看| 欧洲一级精品| 日韩欧美四区| 免费高潮视频95在线观看网站| 中文一区一区三区免费在线观| 99成人在线视频| 午夜久久av| 99视频精品全国免费| 天堂va欧美ⅴa亚洲va一国产| 精品一二三区| 久久国产高清| 另类专区亚洲| 日韩av影院| 欧美日韩国产免费观看视频| 牛牛精品成人免费视频| 亚洲深夜影院| 麻豆精品国产91久久久久久| 国产一区成人| 日韩欧美精品一区| 国产乱码精品一区二区三区四区 | 国产亚洲一区二区手机在线观看| 伊人久久一区| 激情久久久久久| 另类综合日韩欧美亚洲| 99国产精品视频免费观看一公开| 激情不卡一区二区三区视频在线| 在线观看亚洲精品福利片| 久久久成人网| 国产在线日韩精品| 国产精品久久久久av蜜臀| 亚洲资源网站| 亚洲激情另类| 88xx成人免费观看视频库| 免费一区二区三区在线视频| 日本不卡高清视频| 久久国产精品亚洲77777| 午夜av成人| 国产一区二区三区不卡视频网站 | 久久视频精品| 不卡一二三区| 精品99久久| 你懂的国产精品永久在线| 日韩精品a在线观看91| 免费在线观看精品| 黄色成人精品网站| 激情久久久久久| 日韩成人免费| 精品视频国产| 国产a久久精品一区二区三区| 久久国产精品美女| 国产精品激情| 国产日韩欧美一区二区三区在线观看 | 亚洲精品国模| 免费久久精品视频| 黄色在线一区| 欧美日韩视频| 影视先锋久久| 欧美特黄一区| 久久av在线| 奶水喷射视频一区| 亚洲一区二区网站| 免费看欧美美女黄的网站| 国产亚洲激情| 免费欧美在线视频| 日韩av不卡一区二区| 欧美亚洲综合视频| 久久福利在线| 91亚洲国产成人久久精品| 日韩精品中文字幕第1页| 亚洲网站视频| 欧美日韩少妇| 在线精品一区| 欧美日韩国产一区二区在线观看| 国产探花一区在线观看| 麻豆国产精品| 国产欧美一区二区三区精品酒店| 亚洲va中文在线播放免费| 宅男在线一区| 日韩午夜精品| 日本不卡高清视频| 欧美激情视频一区二区三区在线播放| 久久wwww| 久久久久国产精品一区二区| 黄色av日韩| 日本va欧美va欧美va精品| 国产激情精品一区二区三区| 欧美xxxx中国| 在线成人直播| 欧美日一区二区在线观看| 高清久久精品| 另类激情亚洲| 国产精品白浆| 亚洲五月婷婷| 日韩精品一区二区三区免费视频| 国产剧情一区二区在线观看| 欧洲精品一区二区三区| 一区二区国产在线观看| 免费亚洲婷婷| 蜜桃成人av| 欧美日韩a区| 肉色欧美久久久久久久免费看| 在线日韩电影| 国产日韩亚洲| 亚洲精品2区| 久久不见久久见免费视频7| 久久国产亚洲精品| 日本一区福利在线| 97精品国产| 亚洲精品国产精品粉嫩| 在线手机中文字幕| 亚洲日产av中文字幕| 精品国产18久久久久久二百| 午夜在线精品| 国产理论在线| 亚洲三级观看| 日韩在线观看不卡| 中文字幕日韩高清在线| 国产一区二区精品久| 久久午夜视频| 正在播放日韩精品| 青青草国产成人99久久| 999久久久精品国产| 国产剧情一区二区在线观看| 国产在线日韩| 91偷拍一区二区三区精品| 日本中文字幕视频一区| 久久久久国产精品一区二区| 91欧美极品| 美女国产精品| 久久国产电影| 麻豆国产欧美一区二区三区| 香蕉国产精品| 国产一区2区| 国产欧美日韩综合一区在线播放| 影音国产精品| 91精品啪在线观看国产18| 国产精品男女| 亚洲在线久久| 黑丝一区二区三区| 成人久久一区| 精品国产乱码久久久| 日韩精品乱码av一区二区| 亚洲激情av| 99久久精品网站| 国产一区2区| 久久99精品久久久久久园产越南 | 欧美日韩水蜜桃| 91免费精品| 久久精品五月| 欧美日韩一区二区三区在线电影| 国产精品老牛| 国产精品99免费看| 日韩1区在线| 麻豆91小视频| 亚洲一二三区视频| 另类国产ts人妖高潮视频| 欧美日韩一区二区三区视频播放| а√在线中文在线新版| 日韩高清电影一区| 免费观看在线色综合| 午夜在线播放视频欧美| 黑丝美女一区二区| 亚洲天堂黄色| 亚洲欧美伊人| 国产综合欧美| 欧美特黄一区|