結(jié)構(gòu)型模式-代理模式

0 結(jié)構(gòu)型模式

  • 涉及如何組合類和對象以形成更大的結(jié)構(gòu)。
  • 和類有關(guān)的結(jié)構(gòu)模式涉及如何合理地使用繼承機(jī)制。
  • 和對象有關(guān)的結(jié)構(gòu)型模式涉及如何合理地使用對象組合機(jī)制。

1 代理模式

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

  • 1.2 場合:

    • 遠(yuǎn)程代理
      • 為對象在不同的地址空間提供局部代表,這樣可以隱藏一個對象存在于不同地址空間的事實。
    • 虛擬代理
      • 如果一個對象的創(chuàng)建需要花費(fèi)較多的時間,就應(yīng)當(dāng)給該對象提供與一個代理模式
    • 安全代理
      • 用來控制真實對象訪問的權(quán)限。
  • 1.3 代理模式UML

  • image.png
  • 1.4 角色

  • ISubject 該接口是對被訪問者或者被訪問資源的抽象

  • SubjectImpl 被訪問者或者被訪問資源的具體實現(xiàn)類

  • SubjectProxy 被訪問者或者被訪問資源的代理實現(xiàn)類

  • Client 訪問者的抽象角色

package com.mg.springjiemi.proxy;
public interface ISubject {
    public String request();
}

package com.mg.springjiemi.proxy;
public class SubjectImpl implements ISubject {
    @Override
    public String request() {
        return "跟老板交談";
    }
}
package com.mg.springjiemi.proxy;
public class SubjectProxy implements ISubject {
    ISubject iSubject;
    public SubjectProxy(ISubject iSubject) {
        this.iSubject = iSubject;
    }
    @Override
    public String request() {
        System.out.println("先跟秘書交談,安全代理,虛擬代理,遠(yuǎn)程代理");
        return iSubject.request();
    }
}
package com.mg.springjiemi.proxy;
public class Client {
    public static void main(String[] args) {
        ISubject iSubject = new SubjectImpl();
        SubjectProxy proxy = new SubjectProxy(iSubject);
        String value = proxy.request();
        System.out.println(value);
    }
}


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

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

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