代理模式及实现

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();

 


以上是关于代理模式及实现的主要内容,如果未能解决你的问题,请参考以下文章

常用的设计模式及java代码描述

代理模式实现方式及优缺点对比

代理模式实现方式及优缺点对比

代理模式及实现

设计模式—静态代理模式(聚合与继承方式比较)

Android主流视频播放及缓存实现原理调研