代理模式之动态代理

详细解析动态代理模式的实例:

1.       首先完成一个接口的创建(里面有真正的想要实现的方法):

publicinterface Subject {

      publicvoid request();//想要实现的方法

}

2.    写一个真实的主题类实现Subject接口(并实现其中的方法):

publicclass RealSubject implements Subject {

        publicvoid request() {//实现接口中的方法

        System.out.println("真实的主题的实现的方法");

       }

}

3.    写一个动态的代理类实现InvocationHandler接口:

//动态的代理类应该实现的是InvocationHandler接口(java.lang.reflect包下)

publicclass Proxyhandle implements InvocationHandler {

Object obj = null;

//写一个绑定的方法,绑定不同的接口进行代理

public Object bind(Object obj){

this.obj = obj;

//该方法的返回值是一个对象

//Proxy有一个方法newProxyInstace();有三个参数:第一个:表示所代理的真实类类的实例的类的加载器

//第二个参数表示是:所要代理的真实类所实现的接口

//第三个是:代理类本身

return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);

}

//InvocationHandler接口中的方法invoke()

//invoke()之中的method就是表示真实类中实现接口中的那个方法

public Object invoke(Object proxy, Method method, Object[] args)

throws Throwable {

    //调用参数method中的invoke()方法,其中有两个参数

    //第一个参数表示:代理的真实类

    //第二个参数表示:传入的参数对象数组

   System.out.println("代理之前的任务~~~");

   Object o = method.invoke(this.obj, args);

   System.out.println("代理之后的任务~~");

   return o;//返回一个所代理的接口的实现类

      }

    }

4.    测试动态代理的类:TestProxy
public class TestProxy {
        public static void main(String args[]){
             Proxyhandle ph = new Proxyhandle();//拿到代理类的对象
              //绑定代理的真实的主题对象
             Subject sub = (Subject) ph.bind(new RealSubject());//将真实主题与代理进行绑定
             sub.request();//调用真实对象的request(是实现接口中的方法)
              //这时候代理类中的invock()方法将会被自动调用完成代理过程
        }
              //代理不同的真实类的话就直接改变bind()方法中的参数,传入你想要代理的真实类就ok
               //这样就实现了动态的代理了
}
这样四步就完成来了一个动态代理的实例,每一步在代码中都有解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值