代理模式

一、定義

為其他對象提供一種代理以控制對這個對象的訪問。

二、使用場景

當(dāng)無法或不想直接訪問某個對象,或訪問某個對象存在困難時,可以通過一個代理對象來間接訪問。
為了保證客戶端使用的透明性,被代理對象與代理對象需要實現(xiàn)相同的接口。

三、UML類圖

代理模式

Subject:抽象主題類,可以是抽象類或接口,聲明真實主題與代理的共同接口方法。
RealSubject:真實主題類,也稱為被代理類,該類定義了代理所代表的真實對象。
ProxySubject:代理類,該類持有一個真實主題對象的引用。
Client:客戶端。

四、實現(xiàn)

//抽象主題類
public abstract class Subject {
    public abstract void visit();
}

//真實主題類
public class RealSubject extends Subject {
    @Override
    public void visit() {
        System.out.println("Real subject");
    }
}

//代理類
public class ProxySubject extends Subject {
    private RealSubject mSubject;

    public ProxySubject(RealSubject subject) {
        mSubject = subject;
    }

    @Override
    public void visit() {
        mSubject.visit();
    }
}

//客戶端
public class Client {
    public static void main(String[] args) {
        RealSubject real = new RealSubject();
        ProxySubject proxy = new ProxySubject(real);
        proxy.visit();
    }
}

五、應(yīng)用

例子:第三方SDK,Bmob SDK
項目中需要使用Bmob SDK完成用戶注冊登錄功能,在Bmob SDK中用戶類為BmobUser,我們只需要在代碼中定義BmobUserBean extends BmobUser,就可以使用BmobUserBean類進行注冊登錄操作。
但是如果我們在代碼中直接使用BmobUserBean的話,整個項目就與Bmob SDK耦合較緊,如果以后想替換為其它SDK,需要修改的地方較多,這時就可以使用代理模式。
定義一個代理類BbdUserBean,里面持有被代理類BmobUserBean對象的引用,代理類與被代理類實現(xiàn)相同的接口IUser,然后在代碼中使用代理類BbdUserBean。如果以后想替換為其它SDK,只需要修改代理類里面持有的被代理類對象的引用即可。

六、總結(jié)

代理就是真實對象的代表。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容