java动态代理-初识

java动态代理day-01

初识
代理

在日常生活中有,代购、vpn、商家、中介等等;

比如:一家外国大学在中国招生,那么在中国有一家招生中介,这就是这家大学的代理

实例

在开发中,你有a类,需要调用c类的方法完成某个功能,但是c不能让a调用,所以在a和c之间创建一个b代理,c让b访问

登录注册有验证码,验证码是手机短信,但是你没有权力去发短信,这时候需要代理公司向中国移动、中国联通,他们会提供短信发送功能

代理模式是指,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户类和目标对象之间起到中介的作用。

代理的作用
  1. 功能增强:在你原有功能基础上增加了额外的功能。新增加的功能叫做功能增强
  2. 控制访问:代理类不让你访问目标
实现代理的方式
  1. 静态代理

    ​ 代理类是自己手工实现的,自己需要创建java类来表示代理类,同时所要代理的类是确定的,目标确定

    一个用户买u盘,商家就是u盘品牌的代理,u盘厂家是目标

    用户(客户端)–商家(代理)–厂家(目标)

    创建步骤

    1. 创建一个接口,定义卖u盘的方法,表示你的厂家和商家做的事情
    2. 创建厂家类,实现1步骤接口
    3. 创建商家代理,实现1步骤接口
    4. 创建客户端类,调用商家方法买u盘

    代理类完成的功能:

    1. 目标类中方法的调用

    2. 功能增强

    3. 创建一个接口

      package proxy_henry.service;
      
      public interface UsbSell {
      
          /**
           *
           * @param amount 数量
           * @return 价格
           */
          float sell(int amount);
      }
      
      
    4. 创建厂家类

      package proxy_henry.factory;
      
      import proxy_henry.service.UsbSell;
      
      /**
       * 金士顿厂家,不接受用户单独购买
       */
      public class UsbKingFac implements UsbSell {
          @Override
          public float sell(int amount) {
              return 85.0f;
          }
      }
      
    5. 创建商家代理

      package proxy_henry.shangjai;
      
      import proxy_henry.factory.UsbKingFac;
      import proxy_henry.service.UsbSell;
      
      public class taobao implements UsbSell {
      
          private UsbSell factory = new UsbKingFac();
      
          @Override
          public float sell(int amount) {
              float price = factory.sell(amount);//厂家的价格
              price += 25;//商家加价,增强功能
              return price;
          }
      }
      
      
    6. 创建客户端类

      package proxy_henry.ShopMan;
         
      import proxy_henry.shangjai.taobao;
         
      public class shopman {
          public static void main(String[] args) {
              taobao tb = new taobao();
              float price = tb.sell(1);
              System.out.println(price);
          }
      }
         
      
  2. 动态代理

    ​ 在静态代理中目标类很多时,可以使用动态代理,避免静态代理的缺点

    ​ 在动态代理中目标类即使很多,代理类可以很少,而且修改接口中方法时不会影响代理类

    ​ 动态代理是在程序执行的过程中,使用jdk的反射机制,创建代理类对象,并且动态的指定要代理的目标类,简而言之动态代理是一种创建Java对象的能力,让你不用创建taobao类就能创建代理类对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值