Java设计模式之代理模式
Java中代理模式分为静态代理和动态代理,他们的作用是对类的功能的扩展,在不修改原有的类的基础上,增加新的功能,符合了开放闭包的原则(对修改关闭,对扩展开放)
1.静态代理
关键点: 代理要实现和代理对象同样的接口

代码如下:
输出结果:
prepare… teach math… end…
静态代理缺点: 当代理的对象实现多个接口,代理也要实现相应的接口,相应的代理也要增加接口中声明的方法,非常麻烦。
动态代理(jdk代理)
因为静态代理所带来的不便,从而引申出了动态代理,动态代理在运行期确定代理对象,存在内存中,通过jdk的Proxy类来实现。
代码如下:
|
|
动态代理(Cglib代理)
和jdk代理不同的是,当需要代理的对象
public class SayHello {
public void say(){
System.out.println(“hello everyone”);
}
}
public class CglibProxy implements MethodInterceptor{
private Enhancer enhancer = new Enhancer();
public Object getProxy(Class clazz){
//设置需要创建子类的类
enhancer.setSuperclass(clazz);
enhancer.setCallback(this);
//通过字节码技术动态创建子类实例
return enhancer.create();
}
//实现MethodInterceptor接口方法
public Object intercept(Object obj, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
System.out.println(“前置代理”);
//通过代理类调用父类中的方法
Object result = proxy.invokeSuper(obj, args);
System.out.println(“后置代理”);
return result;
}
}
public class DoCGLib {
public static void main(String[] args) {
CglibProxy proxy = new CglibProxy();
//通过生成子类的方式创建代理类
SayHello proxyImp = (SayHello)proxy.getProxy(SayHello.class);
proxyImp.say();
}
}
```
输出结果:
前置代理
hello everyone
后置代理