代理模式及实现
Posted walker993
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代理模式及实现相关的知识,希望对你有一定的参考价值。
代理对象和委托对象继承相同接口,并控制外部对委托对象的访问。
1. 静态代理: 代理对象在编译期确定。
接口(Human):
public interface Human{ public void eatFood(); }
委托类(HumanImpl):
public class HumanImpl implements Human{ public void eatFood(){ System.out.print("真香!"); } }
代理类(HumanProxy):
public class HumanProxy implements Human{ private Human human; public HumanProxy(Human human){ this.human = human; } public void eatFood(){ before(); human.eatFood(); after(); } }
2. 动态代理: 运行期生成代理对象
在代理类和委托类之间生成中介类,该类实现 InvocationHandler 接口。对委托对象方法的调用会转到中介对象的invoke()方法中,method标识了调用哪一个方法,args代表方法参数。
不需要实现代理的接口。
public class HumanDynamicProxy implements InvocationHandler{ //委托对象 private Human human; public HumanDynamicProxy(Human human){ this.human = human; }
@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { before(); Object result = method.invoke(human, args); after(); return result; } }
测试代码:
public static void main(String[] args){ //委托对象 Human realHuman = new HumanImpl(); //中介 InvocationHandler handler = new HumanDynamicProxy(human); //动态代理 Human proxy = (Human) Proxy.newProxyInstance(realHuman.getClass().getClassLoader(), realhuman.getClass().getInterfaces(), handler); //通过代理类,执行方法; proxy.eatFood();
以上是关于代理模式及实现的主要内容,如果未能解决你的问题,请参考以下文章