《JAVA與模式》之代理模式

在閻宏博士的《JAVA與模式》一書中開頭是這樣描述代理(Proxy)模式的:ide

  代理模式是對象的結構模式。代理模式給某一個對象提供一個代理對象,並由代理對象控制對原對象的引用。spa

 

代理模式的結構

  所謂代理,就是一我的或者機構表明另外一我的或者機構採起行動。在一些狀況下,一個客戶不想或者不可以直接引用一個對象,而代理對象能夠在客戶端和目標對象之間起到中介的做用。代理

  代理模式類圖以下:對象

  

  在代理模式中的角色:接口

  ●  抽象對象角色:聲明瞭目標對象和代理對象的共同接口,這樣一來在任何能夠使用目標對象的地方均可以使用代理對象。io

  ●  目標對象角色:定義了代理對象所表明的目標對象。class

  ●  代理對象角色:代理對象內部含有目標對象的引用,從而能夠在任什麼時候候操做目標對象;代理對象提供一個與目標對象相同的接口,以即可以在任什麼時候候替代目標對象。代理對象一般在客戶端調用傳遞給目標對象以前或以後,執行某個操做,而不是單純地將調用傳遞給目標對象。引用

源代碼

  抽象對象角色方法

public abstract class AbstractObject {
    //操做
    public abstract void operation();
}

  目標對象角色im

複製代碼

public class RealObject extends AbstractObject {
    @Override
    public void operation() {
        //一些操做
        System.out.println("一些操做");
    }
}

複製代碼

  代理對象角色

複製代碼

public class ProxyObject extends AbstractObject{
    RealObject realObject = new RealObject();
    @Override
    public void operation() {
        //調用目標對象以前能夠作相關操做
        System.out.println("before");        
        realObject.operation();        
        //調用目標對象以後能夠作相關操做
        System.out.println("after");
    }
}

複製代碼

  客戶端

複製代碼

public class Client {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        AbstractObject obj = new ProxyObject();
        obj.operation();
    }

}

複製代碼

  從上面的例子能夠看出代理對象將客戶端的調用委派給目標對象,在調用目標對象的方法以前跟以後均可以執行特定的操做。

相關文章
相關標籤/搜索