为了账号安全,请及时绑定邮箱和手机立即绑定

模式的秘密---代理模式

难度中级
时长 2小时 0分
学习人数
综合评分9.70
184人评价 查看评价
9.8 内容实用
9.6 简洁易懂
9.7 逻辑清晰
  • 相关代码——(上): @Car.java public class Car implements Moveable{ public void move() { //实现打车 try { Thread.sleep(new Random().nextInt(1000)); syso("车行驶中..."); } catch (Exception e) { ... } } } @Moveable.java public interface Moveable { void move(); } @CarLogProxy.java public class CarLogProxy implements Moveable { private Moveable m; public CarLogProxy(Moveable m){ super(); this.m=m; } public void move() { syso("日志开始..."); m.move(); syso("日志结束..."); } } @CarTimeProxy.java public class CarTimeProxy implements Moveable { private Moveable m; public CarTimeProxy(Moveable m){ super(); this.m=m; } public void move() { long starttime=System.currentTimeMillis(); syso("车开始行驶..."); m.move(); long endtime=System.currentTimeMillis(); syso("车结束行驶。"); syso("车行驶时间:"+(endtime-starttime)+"毫秒!"); } } 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • sjx
    代理模式
    查看全部
  • yyy
    查看全部
  • 代理模式 1、概念:为其他对象提供一种代理,以控制对这个对象的访问(例如火车站代售处)。代理对象起到中介作用,可去掉功能服务或增加额外的服务。 2、分类:a、远程代理---为不同地理的对象提供局域网代表对象。(类似于客户端和服务器端) b、虚拟代理---根据需要将资源消耗很大的对象进行延迟,真正需要的时候才进行创建。(网页中 图片的加载,先用一张虚拟的图片进行显示,等图片加载完成后再进行显示) c 、保护代理---控制用户的访问权限。(发帖功能) d、智能应用代理---提供对目标对象一些额外的服务。(火车站) 代理模式的分类: 远程代理模式:为不同地理的对象提供局域网代表对象(例子:通过远程代理可以监控各个店铺,使之可以直观的了解店里的情况) 虚拟代理:根据需要将资源消耗很大的对象进行延迟,真正需要的时候进行创建 保护代理:控制用户的访问权限 智能引用代理:提供对目标对象提供额外的服务(火车票代售处)
    查看全部
  • 继承和聚合 聚合方式执行效率更高~
    查看全部
  • 代理模式定义 :为其他对象提供一种代理,以控制对这个对象的访问 分类:a、远程代理---为不同地理的对象提供局域网代表对象。(类似于客户端和服务器端) b、虚拟代理---根据需要将资源消耗很大的对象进行延迟,真正需要的时候才进行创建。(网页中 图片的加载,先用一张虚拟的图片进行显示,等图片加载完成后再进行显示) c 、保护代理---控制用户的访问权限。(发帖功能) d、智能应用代理---提供对目标对象一些额外的服务。(火车站)
    查看全部
  • 以智能引用代理为例:

    代理的两种实现方式

    案例描述:提供一个接口,该接口中提供一个车的move方法。正常情况下没有使用代理时,创建一个Car实现该接口,并实现该接口的方法,然后就可以通过创建该实现类的对象并赋值给接口来调用该方法了。

    【1】静态代理:代理和被代理对象在代理之前是确定的,他们都实现相同的接口或者继承相同的抽象类。

    【a】继承的方式实现静态代理:正常情况下是通过Car的方法来完成操作,代理的意思是,创建一个类Car1并继承类Car,并在继承类Car1的构造方法中通过super调用父类的方法,也可以在方法中添加一些额外的功能,这个类Car1就是类Car的代理,最后就可以通过创建Car1的对象赋值给接口,再调用move方法。

    【b】聚合的方式实现静态代理:聚合就是在该类中声明被代理的对象,创建一个Car2,并实现该接口,然后在类中声明Car,通过构造方法对Car的对象进行赋值,然后在实现的方法中通过Car对象调用move()方法。

    【2】动态代理


    查看全部
  • @设计模式——代理模式——了解JDK动态代理 一、JDK动态代理 1、目的:动态产生代理,实现对【不同类】,【不同方法】的代理 2、java动态代理类,位于java.lang.reflect包下,一般涉及两个类: (1)Interface InvocationHandler:该接口中仅定义了一个方法public object invoke(obj,method,args):实际使用中,obj指被代理类的对象,method指被代理的方法,args为该方法参数数组。这个抽象方法在代理类中动态实现 (2)Proxy:该类即为动态代理类:static Object newProxyInstance(ClassLoader loader,Class[] interfaces,InvocationHandler h):返回代理类的一个实例,返回后的代理类可以被当作代理类使用(可使用被代理类的在【接口中】声明过的方法)。 · 第一个参数loader为被代理类的加载器,通过被代理类.getClass().getClassLoader()得到 · 第二个参数interfaces为被代理类实现的所有接口,同样通过getClass().getInterface()得到 · 第三个参数handler就是自己实现的InvocationHandler的实现类的对象 3、***实现: · 声明一个代理h实现InvocationHandler接口,通过【构造方法接受被代理类】,并实现invoke方法,添加业务逻辑(实现原有功能并添加额外功能) · 在测试类中,通过共同实现接口的实例获得代理对象,并实现方法,如Interface1 i = (Interface1)Proxy.newProxyInstance(classLoader,classInterfaces,h); · 通过动态代理对象m,代用其方法i.fun();




    查看全部
  • 实战报错:

    https://img1.sycdn.imooc.com//5af64a7100015b3010680328.jpg

    原因如下:导入包不全

    https://img1.sycdn.imooc.com//5af64a9200012e7c04030230.jpg

    报错分析:

    NoClassDefFoundError发生在JVM在动态运行时,根据你提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就发生了java.lang.NoClassDefFoundError的错误,而ClassNotFoundException是在编译的时候在classpath中找不到对应的类而发生的错误

    查看全部
  • 作业:

    package com.design.proxy.jdkproxy;


    import java.lang.reflect.InvocationHandler;

    import java.lang.reflect.Proxy;


    import com.design.proxy.Car;

    import com.design.proxy.Moveable;


    public class Test {


        /**

         * JDK动态代理测试类

         */

        public static void main(String[] args) {

    Car car = new Car();

    InvocationHandler h = new TimeHandler(car);

    Class<?> cls = car.getClass();

    /**

    * loader 类加载器

    * interfaces 实现接口

    * h InvocationHandler

    */

    Moveable m = (Moveable) Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), h);

    InvocationHandler logHandler =  new LogHandler(m);

    Class<?> clsm = m.getClass();

    Moveable m2 = (Moveable) Proxy.newProxyInstance(clsm.getClassLoader(), clsm.getInterfaces(), logHandler);

    m2.move();

        }


    }


    查看全部
  • /* * 仔细理解一下, 就是一层层嵌套叠加。。。 * 先调用ctp.move(); 输出 “汽车开始行驶...” * clp参数传到ctp.move()中的m.move方法;调用clp.move(),输出 “日志开始...” * car参数传到clp.move()中m.move方法;调用Car对象中的move方法。输出 “汽车行驶中....” * 然后调完clp.move()返回,输出 “日志结束...” * 调完返回ctp.move()返回,输出“汽车结束行驶... 汽车行驶时间: 毫秒” * */
    查看全部
  • 确实讲得可以,可以看得出来老师有认真备课
    查看全部
    1 采集 收起 来源:课程总结

    2017-10-06

  • 看到这里确实真心有感慨 , 虽然前面几节的评论不是特别好 , 但是我没有理会别人的看法(那些轻易对别人下定论的人才真是可笑) , 一路坚持看了下来. 老师比较完整的重现了 jdk 动态代理的实现过程 , 包括用IO将我们的代码生成 java 文件 , 然后调用编译器api 将其编译成 class 文件, 然后加载编译后的类进入内存 , 调用代理方法。 甚至为了抽取出业务逻辑 , 降低耦合 , 提高通用性 , 自定义接口 , 将 InvocationHandler 接口和invoke方法的由来 也解释的很清楚 , 这节课让我看到了很多以前从未接触过的 api 和一种不同思维角度的原理实现。
    查看全部
  • 静态代理:继承、聚合 动态代理:JDK、cglib JDK动态代理:只能对实现了接口的类实现代理 ,没有接口就不能实现JDK动态代理 CGLIB动态代理:针对类产生子类,通过方法拦截技术拦截所有的父类方法的调用
    查看全部
  • 代理模式:包括哪些 代理模式 1、概念:为其他对象提供一种代理,以控制对这个对象的访问(例如火车站代售处)。代理对象起到中介作用,可去掉功能服务或增加额外的服务。 2、分类:a、远程代理---为不同地理的对象提供局域网代表对象。(类似于客户端和服务器端) b、虚拟代理---根据需要将资源消耗很大的对象进行延迟,真正需要的时候才进行创建。(网页中 图片的加载,先用一张虚拟的图片进行显示,等图片加载完成后再进行显示) c 、保护代理---控制用户的访问权限。(发帖功能) d、智能应用代理---提供对目标对象一些额外的服务。(火车站)
    查看全部

举报

0/150
提交
取消
课程须知
本课程是 Java 开发课程的高级课程,希望各位小伙伴们在学习本课程之前,了解以下内容: 1)初步具备面向对象的设计思维 2)了解多态概念 3)了解反射
老师告诉你能学到什么?
1、代理模式概念机分类 2、代理模式应用场景 3、掌握静态代理、动态代理运用 4、理解JDK动态代理实现原理

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!