爲其餘對象提供一種代理以控制對這個對象的訪問。java
- Subject:抽象主題類
- 該類額主要職責就是聲明真實主題與代理的共同接口方法,該類既能夠是一個抽象類也能夠是一個接口。
- RealSubject:真實主題類
- 該類也稱爲被委託類或被代理類,該類定義了代理所表示的真實對象,由其執行具體的業務邏輯方法,而客戶類則經過代理類間接地調用真實主題類中定義的方法。
- ProxySubject:代理類
- 該類也稱爲委託類或代理類,該類持有一個對真實主題類的引用,在其所實現的接口方法中調用真實主題類中相應的接口方法執行,以此起到代理的做用。
- Client:客戶類
- 當沒法或不想直接訪問某個對象或訪問某個對象存在困難時能夠經過一個代理對象來間接訪問,爲了保證客戶端使用的透明性,委託對象和代理對象需實現相同的接口。
public abstract class Subject { /** * 一個普通的業務方法 */ public abstract void visit(); } public class RealSubject extends Subject { @Override public void visit() { // RealSubject中visit的邏輯要求 System.out.println("Real subject!"); } } public class ProxySubject extends Subject { private RealSubject mSubject; // 持有真實主題的引用 public ProxySubject(RealSubject mSubject) { this.mSubject = mSubject; } @Override public void visit() { // 經過真實的主題引用的對象調用真實主題中的邏輯方法 mSubject.visit(); } } public class Client { public static void main(String[] args) { // 構造一個真實主題對象 RealSubject real = new RealSubject(); // 經過真實主題對象構造一個代理對象 ProxySubject proxy = new ProxySubject(real); // 調用代理的相關方法 proxy.visit(); } }
ActivityManagerProxy代理類ide