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 "不要破坏我的房子....";
    }

    }

  • 相关阅读:
    python 协程
    数据库中的一对多,多对多实例
    source命令
    HTTP 协议报文解析
    html中的body和head有什么区别??
    xml json
    内置函数bytes()
    MySQL中的日期和时间函数
    MySQL中的数值函数
    MySQL中的字符串函数
  • 原文地址:https://www.cnblogs.com/1314wamm/p/6049243.html
Copyright © 2011-2022 走看看