1. 程式人生 > >動態代理模式(概念) / JDK 的 Proxy 動態代理

動態代理模式(概念) / JDK 的 Proxy 動態代理

動態代理模式(泛講):
1. 什麼是動態代理模式?

        動態代理模式中的代理類是由工具類或工廠類動態生成的,而不是由程式設計師手工定義的。代理關係是在程式執行過程中確立的。

2. 使用動態代理模式需要注意的幾點:

      1)動態代理模式中不用定義代理類。

      2)目標物件是在客戶類中建立的。原因:因為工具類或工廠類在生成代理類時,需要目標物件,而工具或工廠類是由客戶類呼叫的,由客戶類呼叫工具或工廠類生成代理類,並建立代理物件。

      3)由於目標物件在客戶類中建立,所以這種代理模式,無法實現保護和隱藏目標物件的目的。使用動態代理模式的目的是在不修改目標類的前提下,增強目標方法的功能。

       4)由於代理類是由工具類或工廠類動態生成的,其生成過程具有一般性,可以為任何目標類生成代理類及代理物件。不同的目標類其增強需求是不同的,是具有個性化的。這個個性化功能增強,代理類委託給了另外一個類E實現。這個類E稱為委託類。

        5)使用靜態代理模式和動態代理模式的目的是不同的:

                     a. 使用靜態代理模式的目的是:保護和隱藏目標物件;

                     b. 使用動態代理模式的目的是:在不修改目標類的前提下,增強目標物件。

JDK 的 Proxy 動態代理
      (1) 使用要求:目標類必須要實現業務介面,使用JDK的Proxy動態代理,要求目標類必須是實現介面的類。(即目標方法是接口裡的方法)

      (2) 動態代理類的名稱:

                     名稱由 3 部分構成: $ + Proxy + 數字     (其中數字表示當前JDK的Proxy生成的代理類的索引,索引從0開始計數。)

 動態代理模式時序圖流程 (以JDK的Proxy動態代理為例)


 

JDK的 Proxy 動態代理方法 回撥流程分析


委託類 相當於回撥中的 Some 類,invoke()方法 相當於回撥方法;

JDK的Proxy類 相當於回撥中的Third類(起傳遞的作用<回撥方法的變形形式中>);

動態代理類 相當於 回撥中的 Other類