亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java的代理模式怎么理解

發布時間:2022-03-29 15:35:45 來源:億速云 閱讀:114 作者:iii 欄目:開發技術

這篇文章主要介紹“Java的代理模式怎么理解”,在日常操作中,相信很多人在Java的代理模式怎么理解問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java的代理模式怎么理解”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    代理模式:靜態代理

    有時候,我們可能不想直接面對某事或者某人,這樣我們就可以找一個中介的人去替我們做,比如送禮物叫跑腿、找保潔上某某同城等等。這樣對方也不知道中介的背后是誰參與,起到一個中介作用和保護目標對象的作用,這就是代理模式。也就是有一個中介代替你去做。

    Java的代理模式怎么理解

    1、代理模式的定義

    由于某些原因需要給某對象提供一個代理以控制對該對象的訪問。這時,訪問對象不適合或者不能直接引用目標對象,代理對象作為訪問對象和目標對象之間的中介

    簡單結構圖:

    Java的代理模式怎么理解

    2、代理模式的優缺點

    優點:

    1.在客戶端與目標對象之間起到一個中介作用和保護目標對象的作用

    2.可以擴展目標對象的功能

    3.能將客戶端與目標對象分離,在一定程度上降低了系統的耦合度,增加了程序的可擴展性

    缺點:

    1.會造成系統設計中類的數量增加(因為多了一個或者多個中介類(代理))

    2.在客戶端和目標對象之間增加一個代理對象,會造成請求處理速度變慢

    3.增加了系統的復雜度

    3、代理模式的分類

    代理模式分為靜態代理(本文)動態代理(下一篇文章)

    • 靜態: 由程序員創建代理類或特定工具自動生成源代碼再對其編譯,在程序運行前代理類的 .class 文件就已經存在了

    • 動態: 在程序運行時,運用反射機制動態創建而成

    4、靜態代理模式的結構 

    1.抽象主題類: 通過接口或抽象類聲明真實主題和代理對象實現的業務方法

    2.真實主題類: 實現了抽象主題中的具體業務,是代理對象所代表的真實對象,是最終要引用的對象

    3.代理類: 提供了與真實主題相同的接口,其內部含有對真實主題的引用,它可以訪問、控制或擴展真實主題的功能

    代碼演示:

    定義一個抽象主題:

    靜態代理在使用時,需要定義接口或者父類,而被代理對象與代理對象一起實現相同的接口或者是繼承相同父類

    /**
     *抽象主題
     */
    
    public interface Subject {
        void Request();
    }

    真實主題:

    /**
     *真實主題類:實現抽象主題
     */
    public class RealSubject implements Subject{
        @Override
        public void Request() {
            System.out.println("您的航班正在飛行");
        }
    }

    代理類:

    //代理類,實現抽象類的接口
    public class Proxy implements Subject{
    
        private RealSubject realSubject;
    
        @Override
        public void Request() {
            //先判斷是否存在真實主題RealSubject
            //如果沒有,就新建一個
            if(realSubject == null){
                realSubject = new RealSubject();
            }
    
            //預處理,使用這個方法
            preRequest();
    
            //去訪問真實主題類的方法
            realSubject.Request();
    
            //代理類的后續方法
            postRequest();
        }
    
        private void preRequest() {
            System.out.println("航班馬上起飛啦");
        }
    
        private void postRequest() {
            System.out.println("航班到達目的地,感謝乘坐");
        }
    
    
    }

    測試類:

    public class Test {
        public static void main(String[] args) {
    
            //使用代理去訪問RealSubject里面的Request
            Proxy proxy = new Proxy();
            proxy.Request();
        }
    }

    輸出結果:

    航班馬上起飛啦
    您的航班正在飛行
    航班到達目的地,感謝乘坐

    通過上面的演示,用來一個代理類去訪問了真實主題類的方法,這樣測試類就不知道到底是誰來訪問的,是代理類呢還是代理類后面還有其他人,這樣就可以很好的保護對象。這也是代理模式的優點。

    靜態代理的總結:

    可以在不修改目標對象的功能前提下,對目標實現功能擴展,但是代理對象需要與目標對象實現一樣的接口,所以會有很多代理類,當代理類很多的時候,維護的復雜度就會變大,那么該怎么解決這個問題呢?那就需要使用動態代理。

    5、代理模式的應用場景

    當無法或不想直接引用某個對象或訪問某個對象存在困難時,可以通過代理對象來間接訪問。使用代理模式主要有兩個目的:一是保護目標對象,二是增強目標對象

    該應用場景總結參考自互聯網:

    • 遠程代理,這種方式通常是為了隱藏目標對象存在于不同地址空間的事實,方便客戶端訪問。例如,用戶申請某些網盤空間時,會在用戶的文件系統中建立一個虛擬的硬盤,用戶訪問虛擬硬盤時實際訪問的是網盤空間

    • 虛擬代理,這種方式通常用于要創建的目標對象開銷很大時。例如,下載一幅很大的圖像需要很長時間,因某種計算比較復雜而短時間無法完成,這時可以先用小比例的虛擬代理替換真實的對象,消除用戶對服務器慢的感覺

    • 安全代理,這種方式通常用于控制不同種類客戶對真實對象的訪問權限

    • 智能指引,主要用于調用目標對象時,代理附加一些額外的處理功能。例如,增加計算真實對象的引用次數的功能,這樣當該對象沒有被引用時,就可以自動釋放它

    • 延遲加載,指為了提高系統的性能,延遲對目標的加載。例如,Hibernate 中就存在屬性的延遲加載和關聯表的延時加載

    到此,關于“Java的代理模式怎么理解”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    高邑县| 麻城市| 工布江达县| 礼泉县| 沂源县| 澄城县| 襄城县| 滦平县| 南宁市| 孝义市| 大理市| 临澧县| 沿河| 上犹县| 准格尔旗| 安阳县| 百色市| 瓮安县| 东丽区| 建瓯市| 平武县| 普兰县| 和田县| 五峰| 富源县| 汶川县| 商丘市| 泗水县| 醴陵市| 喀喇沁旗| 奎屯市| 新和县| 永城市| 灵丘县| 金堂县| 合肥市| 礼泉县| 卢湾区| 花莲县| 蚌埠市| 宜章县|