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

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

难度中级
时长 2小时 0分
学习人数
综合评分9.70
184人评价 查看评价
9.8 内容实用
9.6 简洁易懂
9.7 逻辑清晰
  • 相关代码——(下): @TestJDKProxy.java public class TestJDKProxy { /** * JDK动态代理测试类 */ public static void main(String[] args) { Car car=new Car(); InvocationHandler h=new TimeHandler(car); Class<?> cls=car.getClass(); /** * 参数:loader:类加载器;interface:实现接口;h:InvocationHandler。 */ Moveable m=(Moveable) Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), h); m.move(); m.move1(); /** * 执行顺序:m.move()后先执行TimeHandler类中的invoke()方法, * 当执行到method.invoke(target);时,再去执行目标类Car的move()方法, * 然后返回method.invoke(target);的下一句,最后返回这里执行完毕。 */ } } @Moveable.java public interface Moveable { void move(); void move1(); } 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • 相关代码——(上): @Car.java public class Car implements Moveable{ public void move() { //实现打车 try { Thread.sleep(new Random().nextInt(1000)); System.out.println("车行驶中..."); } catch (Exception e) { e.printStackTrace(); } } public void move1() { // TODO Auto-generated method stub System.out.println("move1"); } } @TimeHandler.java public class TimeHandler implements InvocationHandler { private Object target; public TimeHandler(Object target) { super(); this.target = target; } /** * 参数: * proxy:被代理对象;method:被代理对象的方法;args:方法的参数。 * 返回值: * Object:方法的返回值。 */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { long starttime=System.currentTimeMillis(); System.out.println("车开始行驶..."); method.invoke(target);//通过反射机制:Method是一个方法,方法对象。Method.Invoke()相当于method(); long endtime=System.currentTimeMillis(); System.out.println("车结束行驶。"); System.out.println("车行驶时间:"+(endtime-starttime)+"毫秒!"); return null; } }
    查看全部
  • 相关代码——(下): @Client.java public class Client { /** * 测试类 */ public static void main(String[] args) { Car car=new Car(); /*CarTimeProxy ctp=new CarTimeProxy(car); CarLogProxy clp=new CarLogProxy(ctp); clp.move();*/ CarLogProxy clp=new CarLogProxy(car); CarTimeProxy ctp=new CarTimeProxy(clp); ctp.move(); } } 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • 相关代码——(上): @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等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • 相关代码(聚合方式:一个类中调用另一个类对象): @Client.java public class Client { /** * 测试类 */ public static void main(String[] args) { //使用聚合方式 Car car=new Car(); Moveable m=new Car3(car); m.move(); } } @Moveable.java public interface Moveable { void move(); } @Car.java public class Car implements Moveable{ public void move() { //实现打车 try { Thread.sleep(new Random().nextInt(1000)); System.out.println("车行驶中..."); } catch (Exception e) { e.printStackTrace(); } } } @Car3.java public class Car3 implements Moveable { private Car car; public Car3(Car car){ super(); this.car=car; } public void move() { long starttime=System.currentTimeMillis(); System.out.println("车开始行驶..."); car.move(); long endtime=System.currentTimeMillis(); System.out.println("车结束行驶。"); System.out.println("车行驶时间:"+(endtime-starttime)+"毫秒!"); } } 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • 相关代码(继承方式): @Client.java public class Client { /** * 测试类 */ public static void main(String[] args) { //使用继承方式 Moveable m=new Car2(); m.move(); } } @Car2.java public class Car2 extends Car{ @Override public void move() { long starttime=System.currentTimeMillis(); System.out.println("车开始行驶..."); super.move(); long endtime=System.currentTimeMillis(); System.out.println("车结束行驶。"); System.out.println("车行驶时间:"+(endtime-starttime)+"毫秒!"); } } @Moveable.java public interface Moveable { void move(); } @Car.java public class Car implements Moveable{ public void move() { //实现打车 try { Thread.sleep(new Random().nextInt(1000)); System.out.println("车行驶中..."); } catch (Exception e) { e.printStackTrace(); } } } 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • 相关代码(原始方式): @Car.java public class Car implements Moveable{ public void move() { long starttime=System.currentTimeMillis(); System.out.println("车开始行驶..."); //实现打车 try { Thread.sleep(new Random().nextInt(1000)); System.out.println("车行驶中..."); } catch (Exception e) { e.printStackTrace(); } long endtime=System.currentTimeMillis(); System.out.println("车结束行驶。"); System.out.println("车行驶时间:"+(endtime-starttime)+"毫秒!"); } } @Moveable.java public interface Moveable { void move(); } @Client.java public class Client { /** * 测试类 */ public static void main(String[] args) { Car car=new Car(); car.move(); } } 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • @智能引用代理的应用 代理模式定义:为其他对象提供一种代理,以控制对这个对象的访问(例如火车站代售处)。代理对象起到中介作用,可去掉功能服务或增加额外的服务。 代理模式分类: 1、远程代理(Remote Proxy)——为不同地理的对象提供局域网代表对象。(类似于客户端和服务器端) 2、虚拟代理(Virtual Proxy)——根据需要将资源消耗很大的对象进行延迟,真正需要的时候才进行创建。(网页中图片的加载,先用一张虚拟的图片进行显示,等图片加载完成后再进行显示) 3、保护代理(Protect Proxy)——控制用户的访问权限。(发帖功能) 4、智能引用代理(Smart Reference Proxy)——提供对目标对象一些额外的服务。(火车站代售处为火车站代理) 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • @保护代理的应用 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • @虚拟代理的应用 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • @远程代理的应用 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • 动态代理实现步骤
    查看全部
  • AOP
    查看全部
    0 采集 收起 来源:课程总结

    2016-04-05

  • 设计理念
    查看全部
    0 采集 收起 来源:课程总结

    2016-04-05

  • 动态代理的实现步骤
    查看全部

举报

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

微信扫码,参与3人拼团

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

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