zoukankan      html  css  js  c++  java
  • proxy代理类

    package cn.hncu.proxy.rent;

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;

    public class Client {

    public static void main(String[] args) {
    final Renter r = new Renter(); //被代理对象---原型对象

    Object newObj = Proxy.newProxyInstance(
    Client.class.getClassLoader(),
    new Class[]{IRenter.class},
    new InvocationHandler() {
    @Override //参数: proxy是代理后的对象(和外面的newObj是一样的) , method是当前被调用的Method对象, args是当前Method对象的参数
    public Object invoke(Object proxy, Method method, Object[] args)
    throws Throwable {
    //System.out.println("进来来....."+ method.getName());
    if(method.getName().equals("rent")){
    System.out.println("给中介交点费用吧...");
    //System.out.println("你可以走了...");
    return method.invoke(r, args);
    }
    Object res = method.invoke(r, args); //放行,,用原型对象去执行
    return res;
    }
    });

    //代理后的对象newObj 是和 原型对象r 不同类型的对象。 两者属于兄弟关系,都是IRenter接口的实现类(子类)
    //因此下面的方式是错误的,兄弟类之间是无法强转
    //Renter obj2 = (Renter) newObj;
    //obj2.rent();

    //代理后的对象newObj通常都是强转成 接口类型来调用的
    IRenter ir = (IRenter) newObj;
    ir.rent();


    String str = ir.toString();
    System.out.println(str);

    }

    }

    ----------------------------------------------------------------------------------------------------------------

    package cn.hncu.proxy.rent;

    //源对象和代理后的对象的 类型 ---封装隔离
    public interface IRenter {
    public void rent();
    }

    -----------------------------------------------------------------------------------------------------------------

    package cn.hncu.proxy.rent;

    //房东: 被代理对象
    public class Renter implements IRenter{
    public void rent(){
    System.out.println("房东:提供房子,收房租....");
    }

    @Override
    public String toString() {
    return "不要破坏我的房子....";
    }

    }

  • 相关阅读:
    1023. 组个最小数
    1021. 个位数统计
    *1020. 月饼
    *1019. 数字黑洞
    1016. 部分A+B
    *1014. 福尔摩斯的约会
    *1013. 数素数
    *1012. 数字分类
    1011. A+B和C
    *1008. 数组元素循环右移问题
  • 原文地址:https://www.cnblogs.com/1314wamm/p/6049243.html
Copyright © 2011-2022 走看看