最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設(shè)計模式中代理模式應(yīng)用詳解

 更新時間:2022年11月25日 15:44:13   作者:lpf_wei  
代理模式(Proxy Parttern)為一個對象提供一個替身,來控制這個對象的訪問,即通過代理對象來訪問目標(biāo)對象。本文將通過示例詳細(xì)講解一下這個模式,需要的可以參考一下

編程是一門藝術(shù),大批量的改動顯然是非常丑陋的做法,用心的琢磨寫的代碼讓它變的更美觀。

在有些情況下,一個客戶不能或者不想直接訪問另一個對象,這時需要找一個中介幫忙完成某項任務(wù),這個中介就是代理對象。找女朋友、找保姆、找工作等都可以通過找中介完成。

在軟件設(shè)計中,使用代理模式的例子也很多,例如,要訪問的遠(yuǎn)程對象比較大(如視頻或大圖像等),其下載要花很多時間。還有因為安全原因需要屏蔽客戶端直接訪問真實對象,如某單位的內(nèi)部數(shù)據(jù)庫等。

1.代理設(shè)計模式定義

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

2.代理設(shè)計模式的優(yōu)點與不足

代理模式的主要優(yōu)點有:

  • 代理模式在客戶端與目標(biāo)對象之間起到一個中介作用和保護(hù)目標(biāo)對象的作用;
  • 代理對象可以擴(kuò)展目標(biāo)對象的功能;
  • 代理模式能將客戶端與目標(biāo)對象分離,在一定程度上降低了系統(tǒng)的耦合度,增加了程序的可擴(kuò)展性

其主要缺點是:

  • 代理模式會造成系統(tǒng)設(shè)計中類的數(shù)量增加
  • 在客戶端和目標(biāo)對象之間增加一個代理對象,會造成請求處理速度變慢;
  • 增加了系統(tǒng)的復(fù)雜度;

也可以考慮使用動態(tài)代理

3.代理設(shè)計模式的實現(xiàn)思路

代理模式的結(jié)構(gòu)比較簡單,主要是通過定義一個繼承抽象主題的代理來包含真實主題,從而實現(xiàn)對真實主題的訪問,下面來分析其基本結(jié)構(gòu)和實現(xiàn)方法。

代理模式的主要角色如下:

  • 抽象主題(Subject)類:通過接口或抽象類聲明真實主題和代理對象實現(xiàn)的業(yè)務(wù)方法。
  • 真實主題(Real Subject)類:實現(xiàn)了抽象主題中的具體業(yè)務(wù),是代理對象所代表的真實對象,是最終要引用的對象。
  • 代理(Proxy)類:提供了與真實主題相同的接口,其內(nèi)部含有對真實主題的引用,它可以訪問、控制或擴(kuò)展真實主題的功能。

4.代理設(shè)計模式代碼示例

示例場景介紹:在拍攝預(yù)覽的時候,可以渲染各種特效,比如:磨皮,美白,濾鏡等,但是假如不能直接渲染美妝特效,那么美妝特效就可以使用代理的方式添加。

public interface IEffect {
    String renderEffect();

}
public class EffectImpl implements IEffect {
    @Override
    public String renderEffect() {
        System.out.println("渲染美白特效成功");
        return "美白";
    }
}
public class MakeUpEffectImpl implements IEffect {
    @Override
    public String renderEffect() {
        System.out.println("渲染美妝成功");
        return "美妝";
    }
}
public class ProxyOrder  implements IEffect {
    /**
     * 代理類持有被代理的對象 ,進(jìn)行操作的時候,執(zhí)行的是持有的代理類的相應(yīng)邏輯
     */
    private IEffect orderService = new MakeUpEffectImpl();
    @Override
    public String renderEffect() {
        System.out.println("開始渲染美妝");
        orderService.renderEffect();
        System.out.println("渲染美妝結(jié)束");
        return "增加了美妝特效";
    }
}
 public static void main(String[] args) {
        IEffect orderService = new ProxyOrder();
        orderService.renderEffect();
 }

通過代理類,進(jìn)行了美妝的渲染操作,并且進(jìn)行打印,可以認(rèn)為對功能進(jìn)行了增強(qiáng)。

5.代理設(shè)計模式的應(yīng)用場景

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

  • 遠(yuǎn)程代理,這種方式通常是為了隱藏目標(biāo)對象存在于不同地址空間的事實,方便客戶端訪問。例如,用戶申請某些網(wǎng)盤空間時,會在用戶的文件系統(tǒng)中建立一個虛擬的硬盤,用戶訪問虛擬硬盤時實際訪問的是網(wǎng)盤空間。
  • 虛擬代理,這種方式通常用于要創(chuàng)建的目標(biāo)對象開銷很大時。例如,下載一幅很大的圖像需要很長時間,因某種計算比較復(fù)雜而短時間無法完成,這時可以先用小比例的虛擬代理替換真實的對象,消除用戶對服務(wù)器慢的感覺。
  • 安全代理,這種方式通常用于控制不同種類客戶對真實對象的訪問權(quán)限。
  • 智能指引,主要用于調(diào)用目標(biāo)對象時,代理附加一些額外的處理功能。例如,增加計算真實對象的引用次數(shù)的功能,這樣當(dāng)該對象沒有被引用時,就可以自動釋放它。
  • 延遲加載,指為了提高系統(tǒng)的性能,延遲對目標(biāo)的加載。例如,Hibernate中就存在屬性的延遲加載和關(guān)聯(lián)表的延時加載。

到此這篇關(guān)于Java設(shè)計模式中代理模式應(yīng)用詳解的文章就介紹到這了,更多相關(guān)Java代理模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解SimpleDateFormat的線程安全問題與解決方案

    詳解SimpleDateFormat的線程安全問題與解決方案

    這篇文章主要介紹了SimpleDateFormat的線程安全問題與解決方案,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • java中json和對象之間相互轉(zhuǎn)換的運用

    java中json和對象之間相互轉(zhuǎn)換的運用

    本文主要介紹了java中json和對象之間相互轉(zhuǎn)換的運用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 使用maven命令實現(xiàn)下載依賴jar

    使用maven命令實現(xiàn)下載依賴jar

    這篇文章主要介紹了使用maven命令實現(xiàn)下載依賴jar方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java編程之遞歸算法總結(jié)

    java編程之遞歸算法總結(jié)

    這篇文章主要介紹了java編程之遞歸算法總結(jié),具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • spring應(yīng)用中多次讀取http post方法中的流遇到的問題

    spring應(yīng)用中多次讀取http post方法中的流遇到的問題

    這篇文章主要介紹了spring應(yīng)用中多次讀取http post方法中的流,文中給大家列舉處理問題描述及解決方法,需要的朋友可以參考下
    2018-11-11
  • JAVA 內(nèi)部類詳解及實例

    JAVA 內(nèi)部類詳解及實例

    這篇文章主要介紹了JAVA 內(nèi)部類詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • java面向?qū)ο笤O(shè)計原則之接口隔離原則示例詳解

    java面向?qū)ο笤O(shè)計原則之接口隔離原則示例詳解

    這篇文章主要為大家介紹了java面向?qū)ο笤O(shè)計原則之接口隔離原則的示例詳解,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-10-10
  • Spring JDK動態(tài)代理實現(xiàn)過程詳解

    Spring JDK動態(tài)代理實現(xiàn)過程詳解

    這篇文章主要介紹了Spring JDK動態(tài)代理實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • spring security4 添加驗證碼的示例代碼

    spring security4 添加驗證碼的示例代碼

    本篇文章主要介紹了spring security4 添加驗證碼的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • 通過實例講解springboot整合WebSocket

    通過實例講解springboot整合WebSocket

    這篇文章主要介紹了通過實例講解springboot整合WebSocket,WebSocket為游覽器和服務(wù)器提供了雙工異步通信的功能,即游覽器可以向服務(wù)器發(fā)送消息,服務(wù)器也可以向游覽器發(fā)送消息。,需要的朋友可以參考下
    2019-06-06

最新評論

辽阳市| 闸北区| 万年县| 曲周县| 衢州市| 济南市| 玛沁县| 公主岭市| 南平市| 醴陵市| 肃宁县| 宁津县| 霍州市| 安福县| 威海市| 宝山区| 江山市| 伽师县| 广河县| 洛南县| 剑河县| 蓝山县| 油尖旺区| 靖安县| 邮箱| 苍梧县| 阜新市| 宁明县| 福贡县| 内丘县| 额济纳旗| 古蔺县| 肥西县| 安宁市| 正蓝旗| 乌拉特中旗| 莱西市| 昌图县| 铜陵市| 涪陵区| 永登县|