由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。
在代理模式中,一个类代表另一个类的功能,为其他对象提供一种代理以控制对这个对象的访问。这种类型的设计模式属于结构型模式。
代理模式的实现
1. 创建一个接口
//接口
public interface Product {
void show();
}
2. 创建接口的实体类
//接口的实体类
public class RealProduct implements Product {
@Override
public void show() {
System.out.println("获取到一个真实产品RealProduct!");
}
}
3. 创建接口的代理类
代理类提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。在代码中,一般代理会被理解为代码增强,实际上就是在原代码逻辑前后增加一些代码逻辑,而使调用者无感知。
//接口的代理类
public class ProxyProduct implements Product {
private RealProduct realProduct;
@Override
public void show() {
if(realProduct == null){
realProduct = new RealProduct();
}
pre(); //代理增强方法,处理代理之前要做的事情
realProduct.show();
post(); //代理增强方法,处理代理之后要做的事情
}
public void pre(){
System.out.println("代理之前要做的事情");
}
public void post(){
System.out.println("代理之后要做的事情");
}
}
4. 使用代理类来获取实体类的对象
public class ProxyMain {
public static void main(String[] args) {
ProxyProduct proxyProduct = new ProxyProduct();
proxyProduct.show();
}
}