日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

最全介绍的代理模式---第一节-静态代理

發布時間:2024/3/7 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最全介绍的代理模式---第一节-静态代理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是代理?

其實生活中有很多例子

(1)一件產品,生產出來后,需要代理商來銷售它,我們作為客戶,會通過代理商來買產品,代理商就是我們的代理對象,產品為被代理對象(目標對象)

(2)租房子(中介就是代理對象)等等

二、為什么要代理呢?

(1)代理更專業,也更方便

如:你出國留學,你不會很便利地直接去國外與學校直接交談,但是作為學校地招生代理,有著非常專業地流程,對學校也很了解,你就可以通過招生代理直接了解學校,不用很麻煩地出國。

(2)有時候目標對象對于你來說沒有訪問權限,這時就需要中間代理對象來做中間人代替你訪問。

三、代理模式

1、概念:當一個對象不能直接使用,可以在客戶端和目標對象直接創建一個中介,這個中介就是代理,也就是喂目標對象提供一個替身。

2、作用

(1)訪問控制:在代理中,控制是否可以調用目標對象地方法

(2)功能增強:可以在目標對象實現地基礎上,增強額外地功能操作

如:代理商可以增加商品價格,為自己博得利潤,或者向客戶發放優惠券。

3、被代理的對象

遠程對象,或者創建開銷大的對象,或者需要安全控制的對象,等等。

4、分類

(1)靜態代理模式:代理類是手工實現的Java文件,同時代理的目標對象是規定的。

(2)動態代理模式:在程序執行過程中,使用JDK的反射機制,避免靜態代理的缺點。

JDK代理模式:下節會介紹

Cglib代理模式:下節會介紹

四、靜態代理

1、介紹

代理類是手工實現的Java文件,同時代理的目標對象是規定的。使用時,被代理對象(目標對象)與代理對象都必須實現相同的接口或者繼承相同的父類。

2、特點

(1)代理類是自己手工實現的,自己創建一個Java類,表示代理類

(2)你代理的目標對象是確定的

(3)被代理對象(目標對象)與代理對象都必須實現相同的接口或者繼承相同的父類

3、優缺點

優點

1)實現簡單,容易理解;

2)在不修改目標對象的功能的前提下,能夠通過代理對象對目標對象實現功能擴展/增強

缺點:當你的項目中,目標類和代理類很多的時候,有以下的缺點

1)當目標類增加了,代理類可能也需要成倍的增加,大力類數量過多

2)當你的接口中功能增加了,或者修改了,會影響眾多的實現類,廠家類、代理類都需要修改。

4、模擬一個用戶購買U盤的行為

產品U盤UsbSell,目標對象:UsbKingFactory,代理對象:Taobao,客戶終端:ShopMain

  • 實現步驟:

(1)創建一個接口,定義賣U盤的方法,表示你的廠家和商家做的事情

(2)創建廠家類,實現(1)步驟的接口

(3)創建商家,就是代理,也需要實現(1)中的接口

(4)創建客戶端類,調用商家的方法買一個U盤。

  • 其中,代理類完成的功能:

(1)目標類中方法的實現

(2)功能增強

  • 代碼:

(1)UsbSell接口

// 表示功能的廠家,或者商家要完成的功能 public interface UsbSell {// 定義方法// amount: 表示一次購買的數量,暫時不用// 返回表示一個U盤的價格float sell(int amount);// 可以定義多個其他的方法 }

(2)目標對象:UsbKingFactory類

// 目標類:金士頓廠家,不接用戶的單獨購買 public class UsbKingFactory implements UsbSell {@Overridepublic float sell(int amount) {// 一個128G的U盤85元// 后期可以根據amount,可以實現不同的價格,比如1000個,單價85元,return 85.0f;} }

(3)代理對象:Taobao類

// 淘寶是個商家,代理金士頓U盤的銷售 public class Taobao implements UsbSell {//聲明 商家代理的廠家具體是誰private UsbKingFactory factory = new UsbKingFactory();@Override// 實際銷售U盤的功能public float sell(int amount) {// 向廠家發送訂單,告訴廠家,我買了U盤,廠家發貨float price = factory.sell(amount);//廠家的價格// 商家 需要加價,也就是dialing要增加價格// 這里相對于目標對象,就增強了功能// 代理類 在完成目標類方法調用后,增強了功能price += 25;// 在目標類的方法調用后。你做的其他功能,都是增強功能,如發放優惠券System.out.println("淘寶商家,給你返回一個優惠券,或者紅包");return price;} }

(4)客戶終端:ShopMain

public class ShopMain {public static void main(String[] args) {// 創建代理商家的 Taobao 對象Taobao taobao = new Taobao();float price = taobao.sell(1);System.out.println("通過淘寶的商家,購買U盤單價:"+price);} }

總結

以上是生活随笔為你收集整理的最全介绍的代理模式---第一节-静态代理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。