1. 程式人生 > >設計模式之代理模式(靜態代理)

設計模式之代理模式(靜態代理)

代理模式也被稱作委託模式。通俗點來說,就是有一個物件代理另一個物件的操作。
當無法或者不想直接訪問某個物件的存在困難時,可以通過一個代理物件來間接訪問。為了對呼叫者保持透明。需要讓委託物件和代理物件之間實現同樣的介面。
代理模式分為靜態代理和動態代理。

靜態代理主要是:不想直接訪問某個物件,使用一個代理類來訪問的方式。
下面詳細介紹下靜態代理 模式。
靜態模式的使用場景很多,靜態代理模式的通用寫法。抽取介面,和代理類和被代理類分別實現。其中代理類通過建構函式和被代理類關聯在一起。然後代理類中呼叫被代理類的方法。達到代理的目的。
舉個例子:現在有個介面CompanyInterface以及Company和CompanyAgent。
現在CompanyInterface中抽取了一個 signContract的方法。使用Company和CompanyAgent分別實現這個方法。

public interface CompanyInterface {
	//簽訂合同
	public void signContract(String company);

}

Company實現類:

public class Company implements CompanyInterface {

	@Override
	public void signContract(String company) {
		System.out.println("我們和"+company+"簽訂合同了");
	}
}

CompanyAgent 實現類:其中通過構造方法傳入一個需要代理的物件。為了達到和Company之間的解耦。我們這裡傳入的是CompanyInterface的實現類。


public class CompanyAgent implements CompanyInterface{

	private CompanyInterface companyImpl;
	public CompanyAgent(CompanyInterface companyImpl){
		this.companyImpl = companyImpl;
	}
	
	@Override
	public void signContract(String company) {
		System.out.println("我代表公司和"+company+"簽訂合同了");
		companyImpl.signContract(company);
	}

}

呼叫的時候:呼叫代理類的方法,實則是呼叫了被代理的方法。

public class AgentMain {

	public static void main(String[] args) {
		Company tencent = new Company();
		CompanyAgent tencentAgent = new CompanyAgent(tencent);
		tencentAgent.signContract("阿里巴巴");
	}
}

執行結果:
執行結果