99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

設(shè)計(jì)模式之代理模式:武器附魔之道

京東云 ? 來源:京東保險(xiǎn) 孫昊宇 ? 作者:京東保險(xiǎn) 孫昊宇 ? 2025-01-24 11:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:京東保險(xiǎn) 孫昊宇

大家好,今天我們聊聊設(shè)計(jì)模式中的代理模式。作為一種經(jīng)典設(shè)計(jì)模式,它的應(yīng)用極為廣泛。不論你是剛剛?cè)腴T,還是已經(jīng)熟悉設(shè)計(jì)模式,相信這篇文章都會(huì)讓你有所收獲。

一、引子:叫個(gè)代駕

讓我們從一個(gè)引子開始:司機(jī)和代駕?!杆郊臆囁緳C(jī)」和「代駕」是什么關(guān)系?很簡(jiǎn)單,「私家車司機(jī)」是客戶,「代駕」負(fù)責(zé)提供服務(wù),幫他們開車。

不同點(diǎn): 「私家車司機(jī)」有自己的車,他們可能自己開車,也可能找代駕開車;

「代駕」沒有自己的車,但他們會(huì)接到代駕訂單,從而開「私家車司機(jī)」的車。

相同點(diǎn): 他們都會(huì)開車,有駕照。換句話說,他們都屬于「司機(jī)」。

說到這里,我想他們的關(guān)系就很清楚了:「司機(jī)」是「私家車司機(jī)」和「代駕」的父類。雖然都會(huì)開車,但他們對(duì)“開車”這個(gè)行為有不同的實(shí)現(xiàn)。

讓我們把這三個(gè)類的關(guān)系表示出來。首先定義一個(gè)抽象類「司機(jī)」,就叫Driver好了:

@Data
public abstract class Driver {

    String name;

    abstract void driveCar();
}

我們要求每個(gè)司機(jī)都有一個(gè)名字,且都必須會(huì)開車。

接下來看看「私家車司機(jī)」,CommonDriver類:

@Data
public class CommonDriver extends Driver {

    CommonDriver(String name) {
        this.name = name;
    }

    @Override
    public void driveCar() {
        System.out.println(this.getName() + "的汽車正在行駛...");
    }
}

也很簡(jiǎn)單,每次開車的時(shí)候打印一行日志即可。最后看看「代駕」,就叫ProxyDriver吧:

@Data
public class ProxyDriver extends Driver {

    private Driver realDriver;

    ProxyDriver(String name, Driver realDriver) {
        this.name = name;
        this.realDriver = realDriver;
    }

    @Override
    void driveCar() {
        System.out.printf("代駕「%s」正在為%s服務(wù)...n", this.getName(), this.getRealDriver().getName());
        this.realDriver.driveCar();
    }
}

我們要求每個(gè)代駕都要有一個(gè)服務(wù)的客戶,也就是被代理的司機(jī)。我們將這位被代理的司機(jī)——realDriver作為了代駕類的私有變量存起來。當(dāng)代駕在開車時(shí),他實(shí)際上開的是客戶的車。因此,他直接去調(diào)用realDriver的開車方法即可。

三個(gè)類定義好了,讓我們先創(chuàng)建一個(gè)「私家車司機(jī)」——小張,讓小張自己開車;再幫他叫一個(gè)「代駕」——就叫他小代吧,讓小代幫他開車:

public class Main {
    public static void main(String[] args) {
        CommonDriver zhang = new CommonDriver("小張");
        zhang.driveCar();
        ProxyDriver proxyDriver = new ProxyDriver("小代", zhang);
        proxyDriver.driveCar();
    }
}

運(yùn)行一下:

小張的汽車正在行駛... 代駕小代正在為小張服務(wù)... 小張的汽車正在行駛...

結(jié)果符合預(yù)期:不管是誰(shuí)在開車,結(jié)果都是一樣的,開的都是小張的汽車。

二、代理模式:武器附魔之道

代理模式的定義

以上例子展示了一個(gè)代理模式的基本實(shí)現(xiàn)。代理模式(Proxy Pattern) 的定義是:使用代理以代替對(duì)真實(shí)對(duì)象的訪問。 它屬于一種結(jié)構(gòu)型設(shè)計(jì)模式。

例子中的「司機(jī)」、「私家車司機(jī)」和「代駕」三個(gè)角色,分別對(duì)應(yīng)了代理模式中的三個(gè)基本元素:

「私家車司機(jī)」——真實(shí)主題: 被代理的角色,是業(yè)務(wù)邏輯的具體執(zhí)行者。

「代駕」——代理主題: 負(fù)責(zé)代理真實(shí)主題,所有對(duì)其業(yè)務(wù)方法的調(diào)用,都會(huì)被委托給其真實(shí)主題實(shí)現(xiàn)。

「司機(jī)」——抽象主題: 可以是接口,也可以是抽象類。代理主題和真實(shí)主題都會(huì)去實(shí)現(xiàn)/繼承同一個(gè)抽象主題。

優(yōu)點(diǎn)及應(yīng)用

為真實(shí)的對(duì)象設(shè)置一個(gè)代理,可以帶來什么好處?在哪些應(yīng)用場(chǎng)景下,我們需要用到代理模式?

要回答這個(gè)問題,我們不妨想想代理的特點(diǎn):間接訪問。沒錯(cuò),代理模式的優(yōu)點(diǎn)就在于通過代理間接訪問真實(shí)對(duì)象。通過間接訪問,我們就可以讓代理做許多中間操作,通過這些中間操作,我們就可以在不修改真實(shí)對(duì)象的前提下,實(shí)現(xiàn)功能增強(qiáng)。

我的理解:如果把真實(shí)主題比做一把**「寶劍」,專門用來處理核心邏輯**,那么就可以將它的代理比作**「附魔」,用來給真實(shí)主題提供一些強(qiáng)化功能**,附魔的種類就很多啦:火焰

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 代理模式
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    1848
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    CKS32F4xx系列MCU的低功耗模式睡眠模式

    本課講為大家講解CKS32F4xx系列產(chǎn)品的低功耗模式睡眠(Sleep)模式。MCU為滿足某些應(yīng)用場(chǎng)景:如小型化低容量設(shè)備,長(zhǎng)期監(jiān)測(cè)設(shè)備等,低功耗應(yīng)運(yùn)而生,其中根據(jù)需求,用戶可以選擇睡眠模式
    發(fā)表于 06-26 10:02 ?789次閱讀
    CKS32F4xx系列MCU的低功耗<b class='flag-5'>模式</b><b class='flag-5'>之</b>睡眠<b class='flag-5'>模式</b>

    適配器模式代理模式的區(qū)別

      代理模式  組成:  抽象角色:通過接口或抽象類聲明真實(shí)角色實(shí)現(xiàn)的業(yè)務(wù)方法?! ?b class='flag-5'>代理角色:實(shí)現(xiàn)抽象角色,是真實(shí)角色的代理,通過真實(shí)角色的業(yè)務(wù)邏輯方法來實(shí)現(xiàn)抽象方法,并可以附加自己的
    發(fā)表于 10-22 15:17

    Modbus ASCII 模式通訊程序

    C語(yǔ)言編寫的臺(tái)達(dá)變頻器Modbus ASCII 模式通訊程序
    發(fā)表于 12-02 10:25 ?6次下載

    適配器模式、裝飾器模式、代理模式的區(qū)別

    適配器模式、裝飾器模式代理模式都屬于設(shè)計(jì)模式中的結(jié)構(gòu)型模式,結(jié)構(gòu)型設(shè)計(jì)
    發(fā)表于 10-18 15:53 ?1.7w次閱讀
    適配器<b class='flag-5'>模式</b>、裝飾器<b class='flag-5'>模式</b>、<b class='flag-5'>代理</b><b class='flag-5'>模式</b>的區(qū)別

    基于RSM代理模型的武器裝備體系優(yōu)化算法

    Methodology),代理模型的武器裝備體系優(yōu)化算法。其中,選用響應(yīng)面模型作為代理模型,通過均勻設(shè)計(jì)方法生成初始樣本點(diǎn),運(yùn)用最小化響應(yīng)面法進(jìn)行代理模型更新,采用梯度下降法進(jìn)行迭代
    發(fā)表于 12-12 15:36 ?0次下載

    適配器模式代理模式的區(qū)別

    適配器模式:適配器模式有時(shí)候也稱包裝樣式或者包裝。將一個(gè)類的接口轉(zhuǎn)接成用戶所期待的。代理模式:為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問。
    發(fā)表于 01-12 11:56 ?5399次閱讀
    適配器<b class='flag-5'>模式</b>和<b class='flag-5'>代理</b><b class='flag-5'>模式</b>的區(qū)別

    C語(yǔ)言設(shè)計(jì)模式的程序資料合集

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言設(shè)計(jì)模式的程序資料合集包括了:C語(yǔ)言設(shè)計(jì)模式_繼承-多態(tài)-封裝,C語(yǔ)言設(shè)計(jì)模式_單件
    發(fā)表于 11-16 08:00 ?5次下載

    嵌入式軟件設(shè)計(jì)設(shè)計(jì)模式

    文章目錄前言1.設(shè)計(jì)模式適配器模式2.設(shè)計(jì)模式單例模式3.設(shè)計(jì)
    發(fā)表于 10-21 11:07 ?9次下載
    嵌入式軟件設(shè)計(jì)<b class='flag-5'>之</b>設(shè)計(jì)<b class='flag-5'>模式</b>

    設(shè)計(jì)模式結(jié)構(gòu)型模式

    結(jié)構(gòu)型模式一、適配器模式(一)定義:適配器模式(Adapter Pattern)是作為兩個(gè)不兼容的接口之間的橋梁,它結(jié)合了兩個(gè)獨(dú)立接口的功能。這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)加入獨(dú)
    發(fā)表于 11-06 17:51 ?1次下載
    設(shè)計(jì)<b class='flag-5'>模式</b><b class='flag-5'>之</b>結(jié)構(gòu)型<b class='flag-5'>模式</b>

    STM32低功耗模式待機(jī)模式

    上周完成了一個(gè)小項(xiàng)目,項(xiàng)目涉及到stm32的低功耗的待機(jī)模式,特在此記錄下32的待機(jī)模式。 芯片:STM32f030F4 庫(kù):HAL庫(kù) 喚醒方式:用RTC和PA0的上升沿喚醒先來看下低功耗模式
    發(fā)表于 12-07 16:21 ?8次下載
    STM32低功耗<b class='flag-5'>模式</b><b class='flag-5'>之</b>待機(jī)<b class='flag-5'>模式</b>

    GoF設(shè)計(jì)模式代理模式

    它是一個(gè)使用率非常高的設(shè)計(jì)模式,在現(xiàn)實(shí)生活中,也是很常見。比如,演唱會(huì)門票黃牛。假設(shè)你需要看一場(chǎng)演唱會(huì),但官網(wǎng)上門票已經(jīng)售罄,于是就當(dāng)天到現(xiàn)場(chǎng)通過黃牛高價(jià)買了一張。在這個(gè)例子中,黃牛就相當(dāng)于演唱會(huì)門票的代理,在正式渠道無法購(gòu)買門票的情況下,你通過
    的頭像 發(fā)表于 10-17 09:45 ?1181次閱讀

    設(shè)計(jì)模式結(jié)構(gòu)性:代理模式

    代理模式(Proxy Pattern)中,一個(gè)類代表另一個(gè)類的功能。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式。
    的頭像 發(fā)表于 06-09 15:27 ?1032次閱讀
    設(shè)計(jì)<b class='flag-5'>模式</b>結(jié)構(gòu)性:<b class='flag-5'>代理</b><b class='flag-5'>模式</b>

    裝飾器模式代理模式的區(qū)別

    什么是裝飾器模式 裝飾器模式(Decorator Pattern): 在不改變對(duì)象自身的基礎(chǔ)上,在程序運(yùn)行期間給對(duì)象動(dòng)態(tài)的添加職責(zé); 感覺和繼承如出一轍,不改變父類,子類可拓展功能; 優(yōu)點(diǎn) 裝飾類
    的頭像 發(fā)表于 10-08 14:25 ?5456次閱讀
    裝飾器<b class='flag-5'>模式</b>和<b class='flag-5'>代理</b><b class='flag-5'>模式</b>的區(qū)別

    設(shè)計(jì)模式代理模式的使用場(chǎng)景

    設(shè)計(jì)模式在我看來更像是一種設(shè)計(jì)思維或設(shè)計(jì)思想,它就像《孫子兵法》一樣,為你的項(xiàng)目工程提供方向,讓你的項(xiàng)目工程更加健壯、靈活,延續(xù)生命力。本文即將分享的是設(shè)計(jì)模式的其中一種:代理模式。
    的頭像 發(fā)表于 10-08 14:34 ?1436次閱讀
    設(shè)計(jì)<b class='flag-5'>模式</b>中<b class='flag-5'>代理</b><b class='flag-5'>模式</b>的使用場(chǎng)景

    實(shí)踐GoF的23種設(shè)計(jì)模式:備忘錄模式

    相對(duì)于代理模式、工廠模式等設(shè)計(jì)模式,備忘錄模式(Memento)在我們?nèi)粘i_發(fā)中出鏡率并不高,除了應(yīng)用場(chǎng)景的限制之外,另一個(gè)原因,可能是備忘
    的頭像 發(fā)表于 11-25 09:05 ?831次閱讀
    實(shí)踐GoF的23種設(shè)計(jì)<b class='flag-5'>模式</b>:備忘錄<b class='flag-5'>模式</b>