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

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

难度中级
时长 2小时 0分
学习人数
综合评分9.70
184人评价 查看评价
9.8 内容实用
9.6 简洁易懂
9.7 逻辑清晰
  • 智能引用代理
    查看全部
  • 保护代理
    查看全部
  • 虚拟代理
    查看全部
  • 远程代理
    查看全部
  • 代理模式分类: 远程代理,虚拟代理,职能代理,保护代理
    查看全部
  • 代理模式基本概念
    查看全部
  • 代理模式定义:为其他对象提供一种代理以控制对这个对象的访问
    查看全部
  • 动态代理步骤
    查看全部
  • 本节看不太懂
    查看全部
  • 本节看不太懂
    查看全部
  • *静态代理:代理和被代理对象在代理之前是确定的,实现了相同的接口或抽象类 *静态代理实现方式:继承和聚合 *继承:创建一个类(代理类)继承被代理类(实现相同的接口),在代理类中调用父类的被代理方法,在方法的前后增加代理的业务逻辑 *聚合:一个类中调用另一个类的对象(两者实现相同接口)。在代理类中声明被代理类的对象,并通过构造方法将对象传进来(初始化)。在代理类的接口方法中调用被代理类对象的方法,并在方法前后增加相应代理业务逻辑。
    查看全部
  • 测试代理类 Car car=new Car(); InvocationHandler handler=new TimeHandler(car);//为car对象设置代理 Class<?> carClass= car.getClass(); //获取被代理类的类类型 /** * 使用Proxy.newInstance * 三个参数 * 1. 被代理类的类加载器 * 2. 被代理类的所有接口 类类型 * 3. InvocationHandler 实现了InvocationHandler接口的对象 */ Moveable moveable= (Moveable) Proxy.newProxyInstance(carClass.getClassLoader(), carClass.getInterfaces(), handler); moveable.move();
    查看全部
  • JDK实现动态代理,即可以为任何对象增加功能 示例:代理类的实现 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** *使用jdk提供的invocationHandler接口实现动态代理 * 实现对任何类(不仅限于Moveable)的记录时间操作。 */ public class TimeHandler implements InvocationHandler { private Object target; //定义一个Object,代表被代理的对象 public TimeHandler(Object target) { this.target=target; } /** * 1. 实现InvocationHandler接口,并重写invoke方法 * @param proxyObj 生成的代理对象。 * @param method 要代理的方法 * @param args 代理方法的参数 * @return 代理方法返回的返回值 */ @Override public Object invoke(Object proxyObj, Method method, Object[] args) throws Throwable { long start = System.currentTimeMillis(); System.out.println("小车开始行驶。。。"); Object returnObj= method.invoke(target); //执行原有方法。如果方法有参数,作为invoke第二参数传入 long end=System.currentTimeMillis(); System.out.println("小车结束行驶。。。时间"+(end-start)); return returnObj; //将被代理方法的返回值返回。 } }
    查看全部
  • 静态代理----使用聚合(组合)方式 /** * 使用 聚合方式 实现代理 * 优点:比较灵活(推荐使用),比如:可以任意改变顺序 */ public class CarTimeProxy implements Moveable { private Moveable car; //声明一个要代理的对象 public CarTimeProxy(Moveable car) { this.car = car; } /** * 代理该对象,实现记录时间 */ @Override public void move() { long start = System.currentTimeMillis(); System.out.println("小车开始行驶。。。"); car.move(); long end=System.currentTimeMillis(); System.out.println("小车结束行驶。。。时间"+(end-start)); } }
    查看全部
  • 静态代理---继承方式 实现代理 /** * 使用继承的方式为车对象实现代理方式 * 缺点:不够灵活,比如:如果要增加代理,而这些代理的先后顺序不确定。就要构建出很多代理类。 */ public class CarTimeProxy extends Car { /** * 重写父类的move方法。在前后增加 记录时间 代码,实现汽车代理 */ @Override public void move() { long start=System.currentTimeMillis(); System.out.println("小车开始行驶。。。"); super.move();//执行父类执行的函数 long end=System.currentTimeMillis(); System.out.println("小车结束行驶。。。时间"+(end-start)); } }
    查看全部

举报

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

微信扫码,参与3人拼团

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

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