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

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

java設計模式之Proxy(代理)

瀏覽:51日期: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久久,三上悠亚国产精品一区二区三区
久久精品国产99国产精品| 久久久久久久久丰满| 日韩在线精品| 成人在线黄色| 欧美日韩视频网站| 91tv亚洲精品香蕉国产一区| 亚洲永久av| 久久久久91| 在线中文字幕播放| 国产一区国产二区国产三区| 精品视频一区二区三区在线观看| 精品国产一区二区三区性色av| 精品视频一区二区三区在线观看 | 日本亚洲不卡| 国产视频一区二区在线播放| 欧美国产先锋| 日韩成人亚洲| 亚洲综合小说| 免费一级欧美片在线观看网站| 国产欧美一区二区三区国产幕精品 | 国产精品115| 国产理论在线| 先锋亚洲精品| 国产一区二区三区免费在线| 99riav1国产精品视频| 国产精品自拍区| 福利在线免费视频| 蜜桃视频一区二区| 国产成人免费| 亚洲天堂日韩在线| 精品理论电影在线| 日韩中文字幕不卡| 高清av一区| 日韩av电影一区| 国产一区日韩欧美| 国产日产精品一区二区三区四区的观看方式| 久久久久免费| 国产乱人伦精品一区| 在线看片不卡| 成人日韩精品| 久久香蕉网站| 午夜精品福利影院| 不卡在线一区| 四季av一区二区凹凸精品| 亚洲一区二区三区四区电影| 国产高潮在线| 国产一区二区三区国产精品| 国产视频一区二| 亚洲五月综合| 久久亚洲美女| 天堂av在线一区| 在线亚洲观看| 夜夜嗨一区二区| 国产字幕视频一区二区| 日本蜜桃在线观看视频| 欧美天堂一区| 日本亚洲欧美天堂免费| 在线观看一区| 日本一区免费网站| 欧美日韩xxxx| 国产精品午夜一区二区三区| 日本h片久久| 国产精品视频一区二区三区四蜜臂 | 成人在线黄色| 日韩在线看片| 国产精品99一区二区| 蜜桃成人精品| 欧美~级网站不卡| 久久成人亚洲| 亚洲精品少妇| 国产精品地址| 福利片在线一区二区| 97se综合| 免费不卡中文字幕在线| 麻豆成人在线| 91免费精品国偷自产在线在线| 欧美在线不卡| av在线最新| 亚洲少妇自拍| 国产欧美一区二区三区国产幕精品| 国产精品久一| 麻豆理论在线观看| 免费久久精品| 亚洲精品免费观看| 精品一区二区三区视频在线播放| 高清不卡一区| 日韩在线卡一卡二| 免费一级欧美片在线观看网站 | 欧美日韩中文| 国产va免费精品观看精品视频| 成人va天堂| 黄色亚洲在线| 国产精品magnet| 中文亚洲免费| 久久免费影院| 另类av一区二区| 欧美激情麻豆| 一区二区精彩视频| 婷婷国产精品| 精品三区视频| 日韩中文字幕| 欧美日韩一二三四| 欧美激情三区| 日韩高清不卡一区二区| 99久久99久久精品国产片果冰| 国产日产精品_国产精品毛片| 日韩精品一区二区三区免费观影| 日本vs亚洲vs韩国一区三区二区| 在线日韩中文| 欧美少妇精品| 久久精品国内一区二区三区| 亚州精品视频| 99在线精品免费视频九九视| 麻豆91小视频| 久久只有精品| 国产精品毛片久久久| 日韩欧美中文在线观看| 亚洲一区成人| 免费毛片在线不卡| 日韩中文影院| 国产 日韩 欧美 综合 一区| 亚洲精选av| 久久高清国产| 乱人伦精品视频在线观看| 欧美特黄视频| 樱桃成人精品视频在线播放| 日韩在线短视频| 久久国产欧美| 99久久亚洲精品蜜臀| 亚洲黄色网址| 色爱综合av| 激情欧美一区二区三区| 伊人久久视频| 亚洲国产专区校园欧美| 极品日韩av| 99pao成人国产永久免费视频| 日韩欧美一区二区三区在线观看| 精品一区视频| 精品亚洲美女网站| 亚洲精品网址| 免费人成在线不卡| 欧美日本久久| 国产一区二区三区四区五区传媒| 欧美成a人免费观看久久| 99国产成+人+综合+亚洲欧美| 噜噜噜躁狠狠躁狠狠精品视频| 日韩三区四区| 欧美男人天堂| 野花国产精品入口| 国产精品亲子伦av一区二区三区 | 午夜久久美女| 日韩精品一区第一页| 亚洲精品大片| 精品理论电影在线| 欧美精品自拍| 国产乱论精品| 在线综合视频| 国产精东传媒成人av电影| 久久高清精品| 日韩av资源网| 久久精品二区三区| 蜜桃久久久久久| 丝袜诱惑一区二区| 亚洲精品四区| 久久国产日本精品| 国产欧美一区二区精品久久久| 特黄特色欧美大片| 国产精品黄色| 日韩精品社区| 婷婷成人基地| 国产一区二区久久久久| 中文字幕亚洲精品乱码| 在线成人直播| 日韩久久视频| 老司机精品在线| 涩涩涩久久久成人精品| 国产精品字幕| av资源中文在线| 国产精品入口久久| 亚洲精品一二| 在线观看亚洲精品福利片| 亚洲www啪成人一区二区| 国产精品www994| 日本不卡一二三区黄网| 国产视频亚洲| 午夜久久黄色| 欧美影院三区| 欧美日韩一二三四| 欧美日韩尤物久久| 精品网站aaa| 欧美国产极品| 国产乱码精品| 国产精品网址| 精品国产18久久久久久二百| 欧美国产极品| 成人三级高清视频在线看| 97视频热人人精品免费| 98精品视频| 久久免费黄色| 亚洲精品一区二区在线看|