动态代理详解地址
代理模式也被称作委托模式。通俗点来说,就是有一个对象代理另一个对象的操作。
当无法或者不想直接访问某个对象的存在困难时,可以通过一个代理对象来间接访问。为了对调用者保持透明。需要让委托对象和代理对象之间实现同样的接口。
代理模式分为静态代理和动态代理。
静态代理主要是:不想直接访问某个对象,使用一个代理类来访问的方式。
下面详细介绍下静态代理 模式。
静态模式的使用场景很多,静态代理模式的通用写法。抽取接口,和代理类和被代理类分别实现。其中代理类通过构造函数和被代理类关联在一起。然后代理类中调用被代理类的方法。达到代理的目的。
举个例子:现在有个接口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("阿里巴巴");
}
}
执行结果: