增强对象的功能:代理模式

对象的功能增强

一、装饰模式

动态地给一个对象添加一些客顽外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。

二、代理模式

1、概念
  1. 真实对象

    被代理对象

  2. 代理对象

  3. 代理模式

    代理对象代理真实对象,达到增强真实对象功能的目的

2、实现方式
  1. 静态代理

    有一个类文件描述代理模式

  2. 动态代理

    在内存中形成代理类

    用的更多

三、实现步骤

  1. 代理对象和真实对象实现相同的接口
  2. 代理对象= newProxy.newInstance()
  3. 使用代理对象调用方法
  4. 增强方法
//1. 创建真实对象
User user = new User();
//2. 动态代理增强user对象
/*
	三个参数:
	1. 类加载器:真实对象.getClass().getClassLoader()
	2. 接口数组:真实对象.getClass().getInterfaces()
	3. 处理器:new InvocationHandler
*/
UserInterface proxy_user = (UserInterface)Proxy.newProxyInstance(user.getClass().getClassLoader(),user.getClass().getInterfaces(),new InvocationHandler){
    // 代理逻辑编写的方法:代理对象调用的所有方法都会触发该方法执行
    /*
    	参数
    	1.	proxy:代理对象
    	2.	method:代理对象调用的方法,被封装为的对象
    	3.	args:代理对象调用方法时,传递的实际参数
    */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{
        return null;
    }
});
//3.调用方法

四、增强方式

  1. 增强参数列表

    判断是否是某个方法

    if(method.getName().equals("sale"){
        //1. 增强参数
        double moneuy = (double) args[0];
        money = money * 0.85;
        Object obj = mothod.invoke(user,args);
        return obj;
    })else{
        Object obj = mothod.invoke(user,args);
        return obj;
    }
    
  2. 增强返回值类型

    if(method.getName().equals("sale"){
        //1. 增强参数
        double moneuy = (double) args[0];
        money = money * 0.85;
       String obj = (String)mothod.invoke(user,args);
        return obj + "_鼠标垫";
    })else{
        Object obj = mothod.invoke(user,args);
        return obj;
    }
    
  3. 增强方法体执行逻辑

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值