1. 程式人生 > >代理模式-控制物件訪問

代理模式-控制物件訪問

代理模式定義

為其它物件提供一種代理以控制對這個物件的訪問。

代理模式結構圖

在這裡插入圖片描述

代理模式角色介紹

抽象主題角色:Subject,一個普通的業務抽象類或介面。

真實主題角色,RealSubject,它實現了抽象主題角色定義的介面,是業務邏輯的真正執行者。

代理主題角色,Proxy,它和真實主題角色一樣,也實現了抽象主題角色定義的介面,但它包含了對真實主題的引用,在任何需要的時候,把請求委託給真實主題角色進行處理;它對真實物件的訪問進行控制。

代理模式結構程式碼

抽象主題:

public abstract class Subject {
    public abstract void request();
}

真實主題:

public class RealSubject extends Subject {
    public void request() {
        System.out.println("i am real");
    }
}

代理:

public class Proxy extends Subject {

    private Subject realSubject;

    public Proxy() {
        this.realSubject = new RealSubject();
    }

    public void request() {
        this.before();
        realSubject.request();
        this.after();
    }

    private void before(){
        System.out.println("i am proxy before");
    }

    private void after(){
        System.out.println("i am proxy after");
    }
}

客戶端:

public class Client {

    public static void main(String[] args) {
        Subject subject = new Proxy();
        subject.request();
    }
}

代理模式執行機制

代理角色和真實主題角色實現共同的抽象主題角色,來達到代理角色替換真實主題角色的目的。
代理角色雖然可以替換真實主題角色,但代理角色通過持有真實主題角色物件,把請求再委託給真實主題角色;通常代理角色委託請求前後會進行相關前置或後置處理,以此達到對真實物件的控制。

代理模式解決的核心問題

代理模式通過共同實現和組合真實物件,實現了對真實物件的控制,相當於真實物件的前置屏障。