黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

Java設計模式

Java代理模式

代理模式是指,為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個對象不適合或者不能直接引用另一個對象,而代理對象可以在客戶類和目標對象之間起到中介的作用。

  百度百科《代理模式》

換句話說,使用代理對象,是為了在不修改目標對象的基礎上增強主業務邏輯

客戶類真正的想要訪問的對象是目標對象,但客戶類真正可以訪問的對象是代理對象。客戶類對目標對象的訪問是通過訪問代理對象來實現的。當然,代理類與目標類要實現同一個接口。

例如: 有A,B,C三個類, A原來可以調用C類的方法, 現在因為某種原因C類不允許A類調用其方法,但B類可以調用C類的方法。A類通過B類調用C類的方法。這里B是C的代理。 A通過代理B訪問C.

原來的訪問關系:

通過代理的訪問關系:

Window系統的快捷方式也是一種代理模式。快捷方式代理的是真實的程序,雙擊快捷方式是啟動它代表的程序。

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

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

介紹

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

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

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

如何解決:增加中間層。

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

應用實例:

⒈Windows 里面的快捷方式。

⒉豬八戒去找高翠蘭結果是孫悟空變的,可以這樣理解:把高翠蘭的外貌抽象出來,高翠蘭本人和孫悟空都實現了這個接口,豬八戒訪問高翠蘭的時候看不出來這個是孫悟空,所以說孫悟空是高翠蘭代理類。

⒊買火車票不一定在火車站買,也可以去代售點。

⒋一張支票或銀行存單是賬戶中資金的代理。支票在市場交易中用來代替現金,并提供對簽發人賬號上資金的控制。 5、spring aop。

優點:

⒈清晰。

⒉高擴展性。

⒊智能化。

缺點:

⒈由于在客戶端和真實主題之間增加了代理對象,因此有些類型的代理模式可能會造成請求的處理速度變慢。

⒉實現代理模式需要額外的工作,有些代理模式的實現非常復雜。

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

⒈遠程代理。

⒉虛擬代理。

⒊Copy-on-Write 代理。

⒋保護(Protect or Access)代理。

⒌Cache代理。

⒍防火墻(Firewall)代理。

⒎同步化(Synchronization)代理。

⒏智能引用(Smart Reference)代理。

注意事項:

⒈和適配器模式的區別:適配器模式主要改變所考慮對象的接口,而代理模式不能改變所代理類的接口。

⒉和裝飾器模式的區別:裝飾器模式為了增強功能,而代理模式是為了加以控制。

代理模式作用

A、 控制訪問

B、 增強功能

代理模式分類

可以將代理分為兩類:靜態代理與動態代理

代理的實現方式

靜態代理和動態代理

代理模式需求

需求:用戶需要購買u盤, u盤廠家不單獨接待零散購買,廠家規定一次最少購買1000個以上,用戶可以通過淘寶的代理商,或者微商哪里進行購買。

淘寶上的商品,微商都是 u 盤工廠的代理商, 他們代理對u盤的銷售業務。

用戶購買-------代理商(淘寶,微商)----- u 廠家(金士頓,閃迪等不同的廠家)

設計這個業務需要的類:

1. 商家和廠家都是提供 sell 購買u盤的方法。定義購買u盤的接口 UsbSell

2. 金士頓(King)對購買1千以上的價格是 85, 3千以上是80, 5千以上是75。 單個120元。定義UsbKingFactory類,實現UsbSell

3. 閃迪(San)對購買1千以上的價格是 82, 3千以上是78, 5千以上是72。 單個120元。定義UsbSanFactory類,實現UsbSell

4. 定義淘寶的代理商 TaoBao ,實現UsbSell

5. 定義微商的代理商 WeiShang, 實現UsbSell

6. 定義測試類,測試通過淘寶, 微商購買u盤

實現

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

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

步驟 1

創建一個接口。

public interface Image {
   void display();
}

步驟 2

創建實現接口的實體類。

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);
   }
}
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 類的對象。

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

 

全部教程
主站蜘蛛池模板: 欧美不卡一区二区三区免 | 一级视频在线免费观看 | 在线亚洲小视频 | 97国产蝌蚪视频在线观看 | 第一福利在线导航 | 一级一片在线播放在线观看 | 天天射天天舔 | 亚州毛色毛片免费观看 | 成人欧美精品一区二区不卡 | 在线视频天堂 | 日韩精品欧美精品中文精品 | 亚洲欧洲视频在线观看 | 亚洲欧美在线观看播放 | 国产成人啪精品视频免费软件 | 黄色最新网址 | 久久这里只有精品免费播放 | 男男羞羞视频免费网站 | 天天干影院 | 日本a视频在线 | 色戒吃奶动态图 | 小明在看看永久免费平台 | 亚洲国产成人久久一区www妖精 | 久久久久国产午夜 | 三级伦理在线播放 | 毛片免 | 日韩国产精品欧美一区二区 | 日韩欧美激情 | 成年片免费网址网站 | 狠狠色噜噜狠狠狠狠97 | 成人黄视频在线观看 | 激情插插 | 500福利国产精品导航在线 | 欧美2区| 国产制服在线 | 亚洲日本久久一区二区va | 1024jd基地手机看国产 | 黄色短视频免费观看 | 成视频年人黄网站免费视频 | 毛片在线免费 | 宠溺高h共妻 | 日本三级黄色片 |