成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何理解Java設(shè)計(jì)模式的代理模式

這篇文章將為大家詳細(xì)講解有關(guān)如何理解Java設(shè)計(jì)模式的代理模式,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)主營祥符網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都APP應(yīng)用開發(fā),祥符h5成都小程序開發(fā)搭建,祥符網(wǎng)站營銷推廣歡迎祥符等地區(qū)企業(yè)咨詢

一、代理模式

定義

??為其它對(duì)象提供一個(gè)代理對(duì)象,并由代理對(duì)象控制這個(gè)對(duì)象的訪問。

特點(diǎn)

1)很直接的,實(shí)現(xiàn)同一個(gè)接口或者繼承同一個(gè)抽象類。

2)代理對(duì)象控制對(duì)被代理對(duì)象的訪問。

UML

這是代理模式的通用UML,涉及到的角色如下所示:

??- 抽象主題角色:定義了被代理角色和代理角色的共同接口或者抽象類。

??- 被代理角色:實(shí)現(xiàn)或者繼承抽象主題角色,定義實(shí)現(xiàn)具體業(yè)務(wù)邏輯的實(shí)現(xiàn)。

??- 代理角色:實(shí)現(xiàn)或者繼承抽象主題角色,持有被代理角色的引用,控制和限制被代理角色的實(shí)現(xiàn),并且擁有自己的處理方法(預(yù)處理和善后)

二、代理模式實(shí)戰(zhàn)

首先是抽象主題角色:

public interface Subject {
    public void movie();
}

很簡單,單純定義了movie方法,下面看被代理角色的實(shí)現(xiàn):

public class Star implements Subject {

    @Override

    public void movie() {

        System.out.println(getClass().getSimpleName() + ":經(jīng)紀(jì)人接了一部電影,我負(fù)責(zé)拍就好");

    }

}

被代理角色實(shí)現(xiàn)抽象主題角色,專注實(shí)現(xiàn)被代理角色的業(yè)務(wù)邏輯。繼續(xù)看代理角色:

public class Agent implements Subject {

    private Subject star;

    public Agent(Subject star) {

        this.star = star;

    }

    @Override

    public void movie() {

        System.out.println(getClass().getSimpleName() + ":劇本很好,這部電影接下了");

        star.movie();

    }

}

代理角色持有被代理角色的引用,要訪問被代理角色必須通過代理,負(fù)責(zé)被代理角色本職之外的職能,并且具有準(zhǔn)入和過濾的功能。最后來看客戶端的實(shí)現(xiàn):

public class Client {
    public static void main(String[] args) {
        Subject star = new Star();
        Subject proxy = new Agent(star);
        proxy.movie();
    }
}

表面上是調(diào)用了代理的方法,實(shí)際的執(zhí)行者其實(shí)是被代理角色Star,看看結(jié)果就知道:

Agent:劇本很好,這部電影接下了
Star:經(jīng)紀(jì)人接了一部電影,我負(fù)責(zé)拍就好

上面是代理模式其中的一種實(shí)現(xiàn)方式,主要在代理角色Agent中指定了被代理角色Star,意思是經(jīng)紀(jì)人大喊一聲“嘿~兄弟,你是我的了!”。

下面看代理模式的另一種實(shí)現(xiàn)方式,先看抽象主題角色代碼:

public interface Subject {
    public void movie();

    // 指定代理
    public Subject getAgent();
}

增加了指定代理的方法getAgent,再來看被代理角色和代理角色代碼:

// 被代理角色

public class Star implements Subject {

    @Override

    public void movie() {

        System.out.println(getClass().getSimpleName() + ":經(jīng)紀(jì)人接了一部電影,我負(fù)責(zé)拍就好");

    }

    @Override

    public Subject getAgent() {        return new Agent(this);

    }

}

// 代理角色

public class Agent implements Subject {

    private Subject star;

    public Agent(Subject star) {

        this.star = star;

    }

    @Override

    public void movie() {

        System.out.println(getClass().getSimpleName() + ":劇本題材很好,這部電影接下了");

        star.movie();

    }

    @Override

    public Subject getAgent() {        return this;

    }

}

重點(diǎn)看被代理角色getAgent方法,方法里面指定了Agent為代理,而Agent的getAgent并沒有指定代理。下面看客戶端代碼實(shí)現(xiàn):

public class Client {
    public static void main(String[] args) {
        Subject star = new Star();
        Subject proxy = star.getAgent();
        proxy.movie();
    }
}

在客戶端通過getAgent得到指定代理角色,由代理來控制star對(duì)象。

運(yùn)行的結(jié)果的跟上一種方式是一樣的。注意,這種方式是客戶端直接訪問被代理角色,代理由被代理角色指定。前面的一種方式則是客戶端不能訪問直接訪問被代理角色,只能訪問代理。但是,無論是哪一種方式,代理模式的實(shí)現(xiàn)都是必須經(jīng)過代理才能訪問被代理模式。就比如明星拍電影,不會(huì)跳過經(jīng)紀(jì)人直接找到明星,而是經(jīng)過經(jīng)紀(jì)人再到明星,要不然經(jīng)紀(jì)人這個(gè)職位豈不是浪費(fèi)了。

關(guān)于如何理解Java設(shè)計(jì)模式的代理模式就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

文章題目:如何理解Java設(shè)計(jì)模式的代理模式
轉(zhuǎn)載注明:http://jinyejixie.com/article46/ppeoeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、App設(shè)計(jì)、品牌網(wǎng)站建設(shè)、商城網(wǎng)站、靜態(tài)網(wǎng)站、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作