1. 程式人生 > >動態代理一:初識代理模式

動態代理一:初識代理模式

程式碼分析

//公共介面
interface Subject {
	//公共方法
    void request();
}

//委託類
class RealSubject implements Subject {

	//委託類的request邏輯
    public void request(){
        System.out.println("RealSubject Eat eggs");
    }
}

//代理類
class Proxy implements Subject {
	//維持一個Subject引用
    private Subject subject;
    
	//初始化Proxy物件時,通過構造器注入的方式傳入Subject引用
    public Proxy(Subject subject){
        this.subject = subject;
    }
	
	//代理類的request邏輯
    public void request(){
        System.out.println("begin eat eggs");
		//呼叫真實代理物件的request方法
        subject.request();
        System.out.println("end eat eggs");
    }
}

//客戶端
public class Client {
    public static void main(String args[]) {
		//例項化委託類
        RealSubject subject = new RealSubject();
		//例項化代理類,傳入委託類的引用
        Proxy p = new Proxy(subject);
		//呼叫代理類的request方法
        p.request();
    }
}

概念:

代理模式(Proxy Pattern),也稱為委託模式(Delegate Pattern)。

代理模式給某一個物件提供一個代理物件,並由代理物件控制對原物件的引用[1]。

代理模式結構圖:

代理模式結構說明:

1:RealSubject 是委託類,Proxy 是代理類;

2:Subject是委託類和代理類的抽象介面,客戶端針對Subject程式設計;

3:Subject有一個Request()方法,委託類和代理類公有的,必須實現;

4:Proxy擁有對RealSubject的真實引用,一般通過構造方法注入這個引用;

5:Proxy的request方法中,呼叫了RealSubject類的request方法,並且可以在委託類的request方法前後呼叫其他方法。

[1]:《Java與模式》P493