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

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

 

全部教程
主站蜘蛛池模板: 福利在线免费视频 | 女性一级全黄生活片在线播放 | 国产欧美日韩不卡在线播放在线 | 狠狠色视频 | 亚洲欧美日韩中文无线码 | 波多野结衣视频免费 | 在线观看深夜 | 成人在线免费看 | 色美女影院 | 狠狠色丁香九九婷婷综合五月 | 成年女人免费又黄又爽视频 | 欧美一级xxx | 国产aa大片 | 亚洲一级网站 | 干亚洲美女 | 成人精品| 五月天精品视频播放在线观看 | 国产一级一片免费播放i | 欧美视频精品 | 欧美一区二区日韩一区二区 | 国产成人精品免费视频 | 亚洲 欧洲 日产 韩国在线 | 在线亚洲精品国产成人二区 | 日本成人激情 | 亚洲四播房| 日韩精品欧美成人 | 久久精品日日躁精品 | 成人福利视频 | 老司机免费福利视频无毒午夜 | 午夜网站在线观看免费网址免费 | 羞视频在线观看 | 欧美视 | 免费国产人做人视频在线观看 | 久久久久久久999精品视频 | 看a级毛片 | 色88888久久久久久影院 | 欧美成人欧美激情欧美风情 | 亚洲五月六月丁香激情 | 动漫成年美女黄漫网站在线看 | 看片在线 | 免费观看性欧美特黄 |