ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JDK动态代理

2022-05-22 14:32:24  阅读:234  来源: 互联网

标签:商家 JDK price float 代理 amount 动态 public


1.概念

 

 

 2.使用代理模式的作用

 

 

 3. 实现代理的方式

  1. 静态代理

    1)代理类是自己手工实现的,自己创建一个java类表示代理类

    2)同时你所要代理的目标类是确定的。

    优点:  实现简单 容易理解

    缺点:1)当目标类增加了,代理类可能也需要成倍的增加

        2)当你的接口中的功能增加了 或者修改了 会影响众多的实现类

    示例:模拟用户购买u盘

      用户:客户端类 

      厂家:目标类 

      商家:代理类 代理某个品牌的u盘。 

    代码:  

/*
    实现步骤:
1.创建接口 定义卖u盘方法 表示你的厂家和商家做的事情
2. 创建厂家类 实现1接口
3. 创建商家代理类 实现1接口
4. 创建客户端类 调用商家方法买1个u盘
*/
public interface UsbSell {
    // amount:一次购入的数量 返回值表示1个u盘的价格
    float sell(int amount);
    // 还可以定义多个其它方法
}
// 目标类:金士顿厂家 不接受用户单独购买
public class UsbKingFactory implements UsbSell{
    @Override
    public float sell(int amount) {
        // 一个u盘85.0
        // 后期根据amount可以实现不同的价格

        return 85.0f;
    }
}

// 商家 代理金士顿u盘的销售
public class TaoBao implements UsbSell{
    // 声明 商家代理的厂家具体是谁
    private  UsbKingFactory factory = new UsbKingFactory();

    @Override
    public float sell(int amount) {
        // 向厂家发送订单
        float price = factory.sell(amount);
        // 商家需要加价
        price = price+5;

        // 这里可以添加其它代码 进行功能增强
        return price;
    }
}


public class ShopMain {
    public static void main(String[] args) {
        // 代理对象 淘宝
        TaoBao taoBao = new TaoBao();
        float price = taoBao.sell(1);
        System.out.println("通过商家淘宝 购买u盘单价:"+price);
    }
}

      代理类完成的功能

      1. 目标类中方法的调用(控制访问)

      2. 功能增强

  2. 动态代理

    优点:避免静态代理的缺点。目标类即使很多 代理类数量可以很少 当你修改了接口中的方法时,不会影响代理类。

    概念:在程序执行过程中,使用jdk反射机制,创建代理类,并动态指定要代理的对象。 即你不用手动创建TaoBao类就能创建代理对象

       

 

 

     分类

        

 

 

         

 

 

      JDK动态代理

      

         

 

         

 

标签:商家,JDK,price,float,代理,amount,动态,public
来源: https://www.cnblogs.com/LiLi2020/p/16297814.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有