欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設(shè)計模式以虹貓藍兔的故事講解代理模式

 更新時間:2022年04月22日 08:40:29   作者:桃花鍵神  
代理模式是Java常見的設(shè)計模式之一。所謂代理模式是指客戶端并不直接調(diào)用實際的對象,而是通過調(diào)用代理,來間接的調(diào)用實際的對象

模式: 代理模式

案例: 大奔代干娘賣酒

什么是代理模式

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

優(yōu)點

1、代理模式在客戶端與目標(biāo)對象之間起到一個中介作用和保護目標(biāo)對象的作用;

2、代理對象可以擴展目標(biāo)對象的功能;

3、代理模式能將客戶端與目標(biāo)對象分離,在一定程度上降低了系統(tǒng)的耦合度,增加了程序的可擴展性

缺點

1、代理模式會造成系統(tǒng)設(shè)計中類的數(shù)量增加

2、在客戶端和目標(biāo)對象之間增加一個代理對象,會造成請求處理速度變慢;

3、增加了系統(tǒng)的復(fù)雜度;

知識點

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

代理模式實現(xiàn)

案例: 大奔代干娘賣酒

抽象主題(Subject)類:賣酒

真實主題(Real Subject)類:干娘的酒館

代理(Proxy)類:大奔的酒攤

大奔來干娘的酒館前面擺了個攤代理賣酒的生意。

賣酒

一個賣酒接口,聲明了一個賣酒的抽象方法

public interface Jiu {
    void show();
}

干娘的酒館

干娘的酒館類實現(xiàn)了賣酒的接口,并且實現(xiàn)了show()賣酒方法,聲明了一個酒的名字,和一個aa()方法提示大奔來擺攤了

public class GanNiang implements Jiu {
    private String name;
    GanNiang() {
    }
    GanNiang(String name) {
        this.name = name;
        aa();
    }
    @Override
    public void show() {
        System.out.printf("賣出一壇%s", name);
    }
    public void aa() {
        System.out.println("大奔來擺攤了");
    }
}

大奔的酒攤

大奔的酒攤類實現(xiàn)了賣酒接口,聲明了酒的名字和干娘酒館的屬性,并且實現(xiàn)了賣酒方法。

public class DaBen implements Jiu {
    private String name;
    private GanNiang ganNiang;
    DaBen() {
    }
    DaBen(String name) {
        this.name = name;
    }
    @Override
    public void show() {
        if (ganNiang == null) {
            ganNiang = new GanNiang(name);
        }
        ganNiang.show();
    }
}

測試

new一個大奔的酒攤,調(diào)用兩次show()方法,就相當(dāng)于賣了兩次酒。

public class Demo {
    public static void main(String[] args) {
        DaBen daBen = new DaBen("女兒紅");
        daBen.show();
        System.out.println();
        System.out.println();
        daBen.show();
    }
}

這里可以看出第一次賣酒和第二次賣酒輸出的結(jié)果不一樣,因為每一次賣酒都要去干娘的酒館拿酒。大奔第一次來拿酒的時候通知干娘,我來擺攤了,后面干娘已經(jīng)知道大奔來了所以再拿酒就不需要通知了。

總結(jié)

代理模式就是找一個代理代替自己去執(zhí)行,這樣只需要避免了重復(fù)new對象的浪費,并且可以找多個代理代替自己。

如:

1、Windows 里面的快捷方式。

2、豬八戒去找高翠蘭結(jié)果是孫悟空變的,可以這樣理解:把高翠蘭的外貌抽象出來,高翠蘭本人和孫悟空都實現(xiàn)了這個接口,豬八戒訪問高翠蘭的時候看不出來這個是孫悟空,所以說孫悟空是高翠蘭代理類。

3、買火車票不一定在火車站買,也可以去代售點。

4、一張支票或銀行存單是賬戶中資金的代理。支票在市場交易中用來代替現(xiàn)金,并提供對簽發(fā)人賬號上資金的控制。

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

相關(guān)文章

  • Spring+Http請求+HttpClient實現(xiàn)傳參

    Spring+Http請求+HttpClient實現(xiàn)傳參

    這篇文章主要介紹了Spring+Http請求+HttpClient實現(xiàn)傳參,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Java自定義Spring配置標(biāo)簽

    Java自定義Spring配置標(biāo)簽

    這篇文章主要介紹了Java自定義Spring配置標(biāo)簽,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-08-08
  • 淺談Java中父類與子類的加載順序詳解

    淺談Java中父類與子類的加載順序詳解

    本篇文章是對Java中父類與子類的加載順序進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • Java springboot yaml語法注解

    Java springboot yaml語法注解

    這篇文章主要介紹了SpringBoot中的yaml語法及靜態(tài)資源訪問問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Java程序命令行參數(shù)用法總結(jié)

    Java程序命令行參數(shù)用法總結(jié)

    這篇文章主要介紹了Java程序命令行參數(shù)用法總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java中json格式化BigDecimal保留2位小數(shù)

    Java中json格式化BigDecimal保留2位小數(shù)

    這篇文章主要給大家介紹了關(guān)于Java中json格式化BigDecimal保留2位小數(shù)的相關(guān)資料,BigDecimal是Java中的一個數(shù)學(xué)庫,可以實現(xiàn)高精度計算,文中給出了詳細的代碼實例,需要的朋友可以參考下
    2023-09-09
  • FreeMarker配置(Configuration)

    FreeMarker配置(Configuration)

    所有與該configuration 對象關(guān)聯(lián)的模版實例都就可以通過獲得to_upper 轉(zhuǎn)換器,company 來獲得字符串,因此你不需要再一次次的往root 中添加這些變量了。如果你往root 添加同名的變量,那么你新添加的變量將會覆蓋之前的共享變量。
    2016-04-04
  • mybatis-plus團隊新作mybatis-mate實現(xiàn)數(shù)據(jù)權(quán)限

    mybatis-plus團隊新作mybatis-mate實現(xiàn)數(shù)據(jù)權(quán)限

    本文主要介紹了mybatis-plus 團隊新作 mybatis-mate 輕松搞定數(shù)據(jù)權(quán)限,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java日期時間與正則表達式超詳細整理(適合新手入門)

    Java日期時間與正則表達式超詳細整理(適合新手入門)

    如果使用得當(dāng),正則表達式是匹配各種模式的強大工具,下面這篇文章主要給大家介紹了關(guān)于Java日期時間與正則表達式超詳細整理的相關(guān)資料,本文非常適合新手入門,需要的朋友可以參考下
    2023-04-04
  • 使用java生成字母驗證碼

    使用java生成字母驗證碼

    這篇文章主要介紹了使用java生成字母驗證碼的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評論