java静态代理模式

简述:
为其他对象提供一种代理,以控制对这个对象的访问。
代理对象起到中介的作用,可以去掉某些功能,也可以增加某些功能。
常见的代理模式:
虚拟代理:
当我们在浏览帖子的时候,很多帖子的图片刚开始都是默认网站logo,当图片加载完成的时候才会去显示出来,在图片被加载的时候,也不会影响我们去看文字。

代理模式分为静态代理和动态代理。

静态代理:
代理和被代理对象在代理之前是确定的,他们都实现相同的接口或者继承相同的抽象类。
下面我们用静态代理做一个小Demo
假如我们有一辆车,然后我们通过静态代理来记录这辆车行驶的时间。
首先写一个汽车的接口,增加行驶的方法:
public interface Moveable {//增加一个行驶的接口 void move(); }

创建汽车类,实现move方法:
public class Car implements Moveable {@Override public void move() {//实现开车,开车时间为1秒钟 try { Thread.sleep(new Random().nextInt(1000)); } catch (InterruptedException e) { e.printStackTrace(); } } }

【java静态代理模式】最后我们创建一个Car2类,继承Car类,重写move()方法,并且在实现的前后增加业务:
@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) + "毫秒!"); }public static void main(String[] args) { Moveable m = new Car2(); m.move(); } }

输出结果:
汽车开始行驶... 汽车结束行驶... 汽车行驶时间:868毫秒!

以上也就是用继承的方法,简单的实现静态代理,在汽车行驶的时候增加记录时间的业务,但不推荐用继承的方法实现代理,如果业务逻辑很多的话,代码也会无限的膨胀下去。

    推荐阅读