简述:
为其他对象提供一种代理,以控制对这个对象的访问。
代理对象起到中介的作用,可以去掉某些功能,也可以增加某些功能。
常见的代理模式:
虚拟代理:
当我们在浏览帖子的时候,很多帖子的图片刚开始都是默认网站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();
}
}
}
最后我们创建一个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毫秒!