代理模式分为动态代理和静态代理。
静态代理简述:
1、为其他对象提供一种代理,以控制对这个对象的访问。
2、代理对象会起到中介的作用,可以增加些功能,也可以去掉某些功能。
静态代理:
代理和被代理对象在代理之前就是确认的,他们都是实现了相同的接口或者继承了相同的抽象类。
常见的代理模式:
虚拟代理:
当我们在浏览帖子的时候,有些页面加载很多图片,但是刚打开网页的时候,这些图片都是默认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毫秒!
以上就是使用继承的方式,实现的简单的静态代理,在汽车行驶的时候增加记录时间的业务,但是不推荐使用继承的方式实现代理,如果业务逻辑很多的话,代码会无限的膨胀下去。