代理模式-控制物件訪問
阿新 • • 發佈:2019-01-01
代理模式定義
為其它物件提供一種代理以控制對這個物件的訪問。
代理模式結構圖
代理模式角色介紹
抽象主題角色: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();
}
}
代理模式執行機制
代理角色和真實主題角色實現共同的抽象主題角色,來達到代理角色替換真實主題角色的目的。
代理角色雖然可以替換真實主題角色,但代理角色通過持有真實主題角色物件,把請求再委託給真實主題角色;通常代理角色委託請求前後會進行相關前置或後置處理,以此達到對真實物件的控制。
代理模式解決的核心問題
代理模式通過共同實現和組合真實物件,實現了對真實物件的控制,相當於真實物件的前置屏障。