Java代理模式

      網友投稿 928 2022-05-28

      代理模式

      在代理模式(Proxy Pattern)中,一個類代表另一個類的功能。這種類型的設計模式屬于結構型模式。

      在代理模式中,我們創建具有現有對象的對象,以便向外界提供功能接口。

      介紹

      意圖: 為其他對象提供一種代理以控制對這個對象的訪問。

      主要解決: 在直接訪問對象時帶來的問題,比如說:要訪問的對象在遠程的機器上。在面向對象系統中,有些對象由于某些原因(比如對象創建開銷很大,或者某些操作需要安全控制,或者需要進程外的訪問),直接訪問會給使用者或者系統結構帶來很多麻煩,我們可以在訪問此對象時加上一個對此對象的訪問層。

      何時使用 :想在訪問一個類時做一些控制。

      如何解決: 增加中間層。

      關鍵代碼: 實現與被代理類組合。

      優點: 1、職責清晰。 2、高擴展性。 3、智能化。

      缺點: 1、由于在客戶端和真實主題之間增加了代理對象,因此有些類型的代理模式可能會造成請求的處理速度變慢。 2、實現代理模式需要額外的工作,有些代理模式的實現非常復雜。

      使用場景: 按職責來劃分,通常有以下使用場景:

      1、遠程代理。

      2、虛擬代理。

      3、Copy-on-Write 代理。

      4、保護(Protect or Access)代理。

      5、Cache代理。

      Java代理模式

      6、防火墻(Firewall)代理。

      7、同步化(Synchronization)代理。

      8、智能引用(Smart Reference)代理。

      注意事項: 1、和適配器模式的區別:適配器模式主要改變所考慮對象的接口,而代理模式不能改變所代理類的接口。 2、和裝飾器模式的區別:裝飾器模式為了增強功能,而代理模式是為了加以控制。

      實現

      我們將創建一個 Image 接口和實現了 Image 接口的實體類。ProxyImage 是一個代理類,減少 RealImage 對象加載的內存占用。

      ProxyPatternDemo 類使用 ProxyImage 來獲取要加載的 Image 對象,并按照需求進行顯示。

      步驟 1

      創建一個接口。

      Image.java

      public interface Image { void display(); }

      步驟 2

      創建實現接口的實體類。

      RealImage.java

      public class RealImage implements Image { private String fileName; public RealImage(String fileName){ this.fileName = fileName; loadFromDisk(fileName); } @Override public void display() { System.out.println("Displaying " + fileName); } private void loadFromDisk(String fileName){ System.out.println("Loading " + fileName); } }

      ProxyImage.java

      public class ProxyImage implements Image{ private RealImage realImage; private String fileName; public ProxyImage(String fileName){ this.fileName = fileName; } @Override public void display() { if(realImage == null){ realImage = new RealImage(fileName); } realImage.display(); } }

      步驟 3

      當被請求時,使用 ProxyImage 來獲取 RealImage 類的對象。

      ProxyPatternDemo.java

      public class ProxyPatternDemo { public static void main(String[] args) { Image image = new ProxyImage("test_10mb.jpg"); // 圖像將從磁盤加載 image.display(); System.out.println(""); // 圖像不需要從磁盤加載 image.display(); } }

      步驟 4

      執行程序,輸出結果:

      Loading test_10mb.jpg Displaying test_10mb.jpg Displaying test_10mb.jpg

      Java

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Python各種文件刪除函數的功能區分!
      下一篇:部署數據庫主從備份1
      相關文章
      亚洲狠狠婷婷综合久久| 亚洲精品国产V片在线观看| 亚洲精品在线免费观看| 亚洲国产午夜精品理论片在线播放| 亚洲欧洲精品国产区| 亚洲人成电影在线播放| 亚洲一区在线观看视频| 亚洲中文字幕无码久久综合网| 亚洲小说区图片区| 亚洲综合一区二区精品久久| 久久精品国产精品亚洲蜜月| 亚洲AV无码成人网站在线观看| 亚洲综合自拍成人| 亚洲综合精品网站在线观看| 亚洲精品美女久久久久99小说| 亚洲国产成人久久综合碰| 日韩亚洲国产综合高清| 亚洲成av人片在线观看无码不卡| 爱情岛亚洲论坛在线观看| 亚洲日产2021三区| 亚洲av无码不卡久久| 亚洲日韩av无码中文| 亚洲一卡二卡三卡| 亚洲视频无码高清在线| 在线亚洲午夜片AV大片| 亚洲成人在线免费观看| 久久狠狠爱亚洲综合影院| 精品亚洲国产成AV人片传媒| 亚洲国产另类久久久精品黑人| 亚洲成av人片在线观看天堂无码 | 高清在线亚洲精品国产二区| 久久亚洲精精品中文字幕| 18gay台湾男同亚洲男同| 亚洲性无码av在线| 亚洲欧美日韩综合俺去了| 自拍偷自拍亚洲精品播放| 亚洲日本va午夜中文字幕久久| 在线精品亚洲一区二区三区| 亚洲国产成人久久笫一页| 亚洲综合另类小说色区| 婷婷精品国产亚洲AV麻豆不片 |