設計模式之代理模式(靜態代理)
阿新 • • 發佈:2018-12-22
代理模式也被稱作委託模式。通俗點來說,就是有一個物件代理另一個物件的操作。
當無法或者不想直接訪問某個物件的存在困難時,可以通過一個代理物件來間接訪問。為了對呼叫者保持透明。需要讓委託物件和代理物件之間實現同樣的介面。
代理模式分為靜態代理和動態代理。
靜態代理主要是:不想直接訪問某個物件,使用一個代理類來訪問的方式。
下面詳細介紹下靜態代理 模式。
靜態模式的使用場景很多,靜態代理模式的通用寫法。抽取介面,和代理類和被代理類分別實現。其中代理類通過建構函式和被代理類關聯在一起。然後代理類中呼叫被代理類的方法。達到代理的目的。
舉個例子:現在有個介面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("阿里巴巴");
}
}
執行結果: