设计模式之代理模式(静态代理)

动态代理详解地址
代理模式也被称作委托模式。通俗点来说,就是有一个对象代理另一个对象的操作。
当无法或者不想直接访问某个对象的存在困难时,可以通过一个代理对象来间接访问。为了对调用者保持透明。需要让委托对象和代理对象之间实现同样的接口。
代理模式分为静态代理和动态代理。

静态代理主要是:不想直接访问某个对象,使用一个代理类来访问的方式。
下面详细介绍下静态代理 模式。
静态模式的使用场景很多,静态代理模式的通用写法。抽取接口,和代理类和被代理类分别实现。其中代理类通过构造函数和被代理类关联在一起。然后代理类中调用被代理类的方法。达到代理的目的。
举个例子:现在有个接口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("阿里巴巴");
	}
}

执行结果:
执行结果

猜你喜欢

转载自blog.csdn.net/xu_coding/article/details/84076268