一、代理模式的理解
代理访问对象,执行方法。
二、举个例子:环保公司帮工厂做污水处理。
1、工厂和环保公司,签了污水处理合同。
这里,需要做两件事,创建接口IPublicManager,创建实现类ImpOut。
/**
* 需求:公共接口类
*/
public interface IPublicManager {
void out();//污水排出工厂
}
/**
* 合同:污水排出工厂的具体实现
*/
public class ImpOut implements IPublicManager {
@Override
public void out() {
System.out.println("污水已经排出工厂...");
}
}
2、环保公司开始筹划方案
这里,需要做一件事,创建ProxyObject实现IPublicManager
/**
* 代理类
*/
public class ProxyObject implements IPublicManager {
private ImpOut impout;
/**
* 合同传进来
*/
public ProxyObject(ImpOut impout){
this.impout = impout;
}
@Override
public void out() {
//按合同办事
impout.out();
}
}
3、环保公司执行方案
/**
* 执行方案
*/
public class Test {
public static void main(String[] args) {
ProxyObject proxyobject = new ProxyObject(new ImpOut());
proxyobject.out();
}
}
以上部分属于静态代理模式,特点:
一对一:实现类、代理类和接口一对一。例如ImpOut、ProxyObject和IPublicManager;ImpOut2、ProxyObject2和IPublicManager2,以此类推。
接口一样:实现类和代理类实现的接口,都是IPublicManager。
优势:接口不变的话,一劳永逸。
劣势:有新街口,就需要再写一个实现类。
总结:接口确定,建议用静态代理。接口不确定,动态代理模式。
PS:代理模式正解:根据参数,通过反射,动态生成代理类,并执行接口方法。此篇文章没体现这种思想,多谢下面这位朋友的提醒,下篇会有提到的。