亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

基于Java的代理設計模式

2020-07-27 21:46:32
字體:
來源:轉載
供稿:網友
 一、引子

  我們去科技市場為自己的機器添加點奢侈的配件,很多DIYer都喜歡去找代理商,因為在代理商那里拿到的東西不僅質量有保證,而且價格和售后服務上都會好很多。客戶通過代理商得到了自己想要的東西,而且還享受到了代理商額外的服務;而生產廠商通過代理商將自己的產品推廣出去,而且可以將一些銷售服務的任務交給代理商來完成(當然代理商要和廠商來共同分擔風險,分配利潤),這樣自己就可以花更多的心思在產品的設計和生產上了。

  在美國,任何企業的產品要想拿到市場上去賣就必須經過代理商這一個環節,否則就是非法的??磥泶砩淘谏虡I運作中起著很關鍵的作用。 不小心把話題扯遠了,回過頭來,那么在我們的面向對象的程序設計中,會不會有代理商這樣的角色呢?來看這篇文章的人肯定不會說:沒有!

  那么就跟著這篇文章來看看代理模式的奇妙吧。

  二、定義和分類

  代理模式在設計模式中的定義就是:為其他對象提供一種代理以控制對這個對象的訪問。說白了就是,在一些情況下客戶不想或者不能直接引用一個對象,而代理對象可以在客戶和目標對象之間起到中介作用,去掉客戶不能看到的內容和服務或者增添客戶需要的額外服務。

  那么什么時候要使用代理模式呢?在對已有的方法進行使用的時候出現需要對原有方法進行改進或者修改,這時候有兩種改進選擇:修改原有方法來適應現在的使用方式,或者使用一個“第三者”方法來調用原有的方法并且對方法產生的結果進行一定的控制。第一種方法是明顯違背了“對擴展開放、對修改關閉”(開閉原則),而且在原來方法中作修改可能使得原來類的功能變得模糊和多元化(就像現在企業多元化一樣),而使用第二種方式可以將功能劃分的更加清晰,有助于后面的維護。所以在一定程度上第二種方式是一個比較好的選擇!

  當然,話又說回來了,如果是一個很小的系統,功能也不是很繁雜,那么使用代理模式可能就顯得臃腫,不如第一種方式來的快捷。這就像一個三口之家,家務活全由家庭主婦或者一個保姆來完成是比較合理的,根本不需要雇上好幾個保姆層層代理:)

  根據《Java與模式》書中對代理模式的分類,代理模式分為8種,這里將幾種常見的、重要的列舉如下:

  1. 遠程(Remote)代理:為一個位于不同的地址空間的對象提供一個局域代表對象。比如:你可以將一個在世界某個角落一臺機器通過代理假象成你局域網中的一部分。

  2. 虛擬(Virtual)代理:根據需要將一個資源消耗很大或者比較復雜的對象延遲的真正需要時才創建。比如:如果一個很大的圖片,需要花費很長時間才能顯示出來,那么當這個圖片包含在文檔中時,使用編輯器或瀏覽器打開這個文檔,這個大圖片可能就影響了文檔的閱讀,這時需要做個圖片Proxy來代替真正的圖片。

  3. 保護(Protect or Access)代理:控制對一個對象的訪問權限。比如:在論壇中,不同的身份登陸,擁有的權限是不同的,使用代理模式可以控制權限(當然,使用別的方式也可以實現)。

  4. 智能引用(Smart Reference)代理:提供比對目標對象額外的服務。比如:紀錄訪問的流量(這是個再簡單不過的例子),提供一些友情提示等等。

  代理模式是一種比較有用的模式,從幾個類的“小結構”到龐大系統的“大結構”都可以看到它的影子。

  三、結構

  代理模式中的“代理商”要想實現代理任務,就必須和被代理的“廠商”使用共同的接口(你可以想象為產品)。所以自然而然你會想到在java中使用一個抽象類或者接口(推薦)來實現這個共同的接口。于是代理模式就有三個角色組成了:

  1.抽象主題角色:聲明了真實主題和代理主題的共同接口。

  2.代理主題角色:內部包含對真實主題的引用,并且提供和真實主題角色相同的接口。

  3.真實主題角色:定義真實的對象。

  使用類圖來表示下三者間的關系如下:


  當然,圖上所示的是代理模式中的一個具體情況。而代理模式可以非常靈活的使用其他方式來實現,這樣就與圖上所示有很大的區別。

  也許,現在你已經對代理模式已經有了一個宏觀的認識了,下面我們來看看怎么實際的使用代理模式。

  四、舉例

  以論壇中已注冊用戶和游客的權限不同來作為第一個例子:已注冊的用戶擁有發帖,修改自己的注冊信息,修改自己的帖子等功能;而游客只能看到別人發的帖子,沒有其他權限。為了簡化代碼,更好的顯示出代理模式的骨架,我們這里只實現發帖權限的控制。 首先我們先實現一個抽象主題角色MyForum,里面定義了真實主題和代理主題的共同接口――發帖功能。

  代碼如下:

  public interface MyForum

  {

  public void AddFile();

  }

  這樣,真實主題角色和代理主題角色都要實現這個接口。其中真實的主題角色基本就是將這個接口的方法內容填充進來。所以在這里就不再贅述它的實現。我們把主要的精力放到關鍵的代理主題角色上。代理主題角色代碼大體如下:

  public class MyForumProxy implements MyForum
  {
  private RealMyForum forum ;
  private int permission ; //權限值

  public MyForumProxy(int permission)
  {
  forum = new RealMyForum()
  this.permission = permission ;
  }

  //實現的接口

  public void AddFile()
  {
  //滿足權限設置的時候才能夠執行操作
  //Constants是一個常量類
  if(Constants.ASSOCIATOR == permission)
  {
   forum.AddFile();
  }
  else
   System.out.println("You are not a associator of MyForum ,please registe!");
  }
  }

  這樣就實現了代理模式的功能。當然你也可以在這個代理類上添加自己的方法來實現額外的服務,比如統計帖子的瀏覽次數,記錄用戶的登錄情況等等。

  還有一個很常見的代理模式的使用例子就是對大幅圖片瀏覽的控制。在我們常見的網站上面瀏覽圖文的信息時,不知道你有沒有注意到,圖片位置放置的是經過縮小的,當有人要仔細的查看這個圖片時,可以通過點擊圖片來激活一個鏈接,在一個新的網頁打開要看的圖片 。這樣對于提高瀏覽速度是很有好處的,因為不是每個人都要去看仔細圖上的信息。這種情況就可以使用代理模式來全面實現。這里我將思路表述出來,至于實現由于工作原因,就不表述了,至于這種方式在B/S模式下的真實可行性,我沒有確認過,只是憑空的想象。如果不是可行的方式,那這個例子可以放到一個C/S下來實現,這個是絕對沒有問題的,而且在很多介紹設計模式的書和文章中使用。兩種方式的實現有興趣的可以來嘗試一下。

  我們在瀏覽器中訪問網頁時是調用的不是真實的裝載圖片的方法,而是在代理對象中的方法,在這個對象中,先使用一個線程向瀏覽器裝載了一個縮小版的圖片,而在后臺使用另一個線程來調用真實的裝載大圖片的方法將圖片加載到本地,當你要瀏覽這個圖片的時候,將其在新的網頁中顯示出來。當然如果在你想瀏覽的時候圖片尚未加載成功,可以再啟動一個線程來顯示提示信息,直到加載成功。

  這樣代理模式的功能就在上面體現的淋漓盡致――通過代理來將真實圖片的加載放到后臺來操作,使其不影響前臺的瀏覽。

  五、總結

  代理模式能夠協調調用者和被調用者,能夠在一定程度上降低系統的耦合度。不過一定要記住前面講的使用代理模式的條件,不然的話使用了代理模式不但不會有好的效果,說不定還會出問題的
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕av一区二区| 亚洲老头同性xxxxx| 欧美肥臀大乳一区二区免费视频| 中国china体内裑精亚洲片| 欧美日韩国产成人在线| 欧美日韩亚洲精品内裤| 78色国产精品| 国产精品入口免费视| 国产精品美女免费视频| 国产精品丝袜久久久久久高清| 久久久久久国产| 国产91精品最新在线播放| 亚洲欧美国内爽妇网| 亚洲天堂成人在线| 92裸体在线视频网站| 欧美视频免费在线| 亚洲人成免费电影| 亚洲电影免费观看高清完整版在线| 亚洲直播在线一区| 一区二区在线免费视频| 亚洲女同精品视频| 久久五月天色综合| 亚洲国产精品va在线看黑人| 欧美日韩精品在线播放| 亚洲国产日韩欧美在线图片| 1769国内精品视频在线播放| 伊人久久免费视频| 日韩女优在线播放| 久久伊人免费视频| 精品国产一区二区三区久久| 欧美另类xxx| 国产美女被下药99| 国产乱人伦真实精品视频| 亚洲风情亚aⅴ在线发布| 国产精品视频在线播放| 日韩av在线高清| 亚洲欧洲一区二区三区在线观看| 亚洲欧美日韩国产成人| 伊人亚洲福利一区二区三区| 91精品久久久久久久久中文字幕| www.日韩不卡电影av| 国产精品精品久久久久久| 日韩有码在线播放| 91精品国产精品| 国产精品日韩精品| 亚洲缚视频在线观看| 国产大片精品免费永久看nba| 欧美日韩一区二区三区在线免费观看| 国产精品一区二区av影院萌芽| 国产精品自拍偷拍视频| 亚洲国产97在线精品一区| 欧美激情视频在线观看| 92裸体在线视频网站| 国产精品第10页| 日本韩国欧美精品大片卡二| 欧美激情va永久在线播放| 性色av一区二区三区红粉影视| 国产亚洲精品久久久| 日韩精品免费在线视频观看| 日韩av在线资源| 亚洲爱爱爱爱爱| 九九九热精品免费视频观看网站| 自拍偷拍亚洲区| 91九色精品视频| 亚洲男人的天堂在线| 国产有码一区二区| 久久久久国色av免费观看性色| 精品国产区一区二区三区在线观看| 91久久久久久国产精品| 久久91亚洲人成电影网站| 欧美日韩国产综合新一区| 66m—66摸成人免费视频| 欧美视频中文在线看| 国模私拍一区二区三区| 欧美国产精品日韩| 亚洲国产另类 国产精品国产免费| 成人免费在线网址| 亚洲高清在线观看| 国内成人精品视频| 91日本在线视频| 欧美日韩精品在线| 欧美寡妇偷汉性猛交| 深夜福利亚洲导航| 久久亚洲精品成人| 久久在精品线影院精品国产| 亚洲第一偷拍网| 精品视频在线观看日韩| 欧美大尺度激情区在线播放| 成人黄色免费网站在线观看| 国产精品色视频| 91色中文字幕| 国产精品观看在线亚洲人成网| 亚洲欧美色婷婷| 欧美性生交xxxxx久久久| 日韩大胆人体377p| 国产精品jizz在线观看麻豆| 欧美日韩ab片| 欧美激情欧美狂野欧美精品| 精品免费在线视频| 国产一区二区日韩| 日韩免费高清在线观看| 久久99视频免费| 91丨九色丨国产在线| 日韩美女免费线视频| 日韩精品免费一线在线观看| 日韩av网址在线观看| 欧日韩不卡在线视频| 九九久久久久久久久激情| 久久久久久久久久久亚洲| 亚洲国产成人精品女人久久久| 亚洲第一av网| 亚洲精品98久久久久久中文字幕| 欧美日韩国产一区二区| 欧美在线视频播放| 欧美一级成年大片在线观看| 91久久久久久久一区二区| 久久精品国产亚洲精品| 亚洲精品av在线| 国产性色av一区二区| 97久久国产精品| 日韩欧美一区二区三区| 久久综合久久八八| 亚洲色图第三页| 国产精品久久久久久久天堂| 国产欧美va欧美va香蕉在| 欧美肥婆姓交大片| 亚洲精品99久久久久| 91九色精品视频| 日韩av电影在线网| 日本乱人伦a精品| 日韩美女视频免费在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 国产精品吹潮在线观看| 日韩精品极品在线观看播放免费视频| 欧美视频专区一二在线观看| 国外成人性视频| 91久久在线观看| 国内精品一区二区三区| 国产日韩欧美另类| 亚洲精品成人网| 91九色精品视频| 91系列在线观看| 亚洲深夜福利网站| 国产精品视频1区| 亚洲国产欧美日韩精品| 人妖精品videosex性欧美| 九九热r在线视频精品| 亚洲欧美在线一区二区| 日本伊人精品一区二区三区介绍| 日本成熟性欧美| 日本视频久久久| 色播久久人人爽人人爽人人片视av| 国产91网红主播在线观看| 日本午夜在线亚洲.国产| 久久久久成人网| 日韩免费观看在线观看| 精品无人区乱码1区2区3区在线| 久久国产精品影视| 亚洲第一页中文字幕| 亚洲精品国产电影| 欧美日韩亚洲高清| 久久精品99国产精品酒店日本| 欧美在线精品免播放器视频| 日本精品久久久久久久|