二十三種設計模式之結構型模式之代理模式

代理模式

概述


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

適用性


1.遠程代理(RemoteProxy)爲一個對象在不同的地址空間提供局部代表。

2.虛代理(VirtualProxy)根據需要創建開銷很大的對象。

3.保護代理(ProtectionProxy)控制對原始對象的訪問。

4.智能指引(SmartReference)取代了簡單的指針,它在訪問對象時執行一些附加操作。

參與者


  1.Proxy
  保存一個引用使得代理可以訪問實體。若RealSubject和Subject的接口相同,Proxy會引用Subject。
  提供一個與Subject的接口相同的接口,這樣代理就可以用來替代實體。
  控制對實體的存取,並可能負責創建和刪除它。
  其他功能依賴於代理的類型:

2.RemoteProxy負責對請求及其參數進行編碼,並向不同地址空間中的實體發送已編碼的請求。

3.VirtualProxy可以緩存實體的附加信息,以便延遲對它的訪問。

4.ProtectionProxy檢查調用者是否具有實現一個請求所必需的訪問權限。

5.Subject
  定義RealSubject和Proxy的共用接口,這樣就在任何使用RealSubject的地方都可以使用Proxy。

6.RealSubject
  定義Proxy所代表的實體。

類圖


這裏寫圖片描述

例子


Proxy

public class ProxyObject implements Object {

    Object obj;

    public ProxyObject() {
        System.out.println("這是代理類");
        obj = new ObjectImpl();
    }

    public void action() {
        System.out.println("代理開始");
        obj.action();
        System.out.println("代理結束");
    }
}

Subject

public interface Object {

    void action();
}

RealSubject

public class ObjectImpl implements Object {

    public void action() {
        System.out.println("========");
        System.out.println("========");
        System.out.println("這是被代理的類");
        System.out.println("========");
        System.out.println("========");
    }
}

Test

public class Test {

    public static void main() {
        Object obj = new ProxyObject();
        obj.action();
    }
}

result

這是代理類
代理開始

========
========
這是被代理的類

========
========
代理結束

Copyright © 2008 Angus Young
瘋狂Java聯盟:http://www.crazyit.org

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章