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毫秒!
以上也就是用继承的方法,简单的实现静态代理,在汽车行驶的时候增加记录时间的业务,但不推荐用继承的方法实现代理,如果业务逻辑很多的话,代码也会无限的膨胀下去。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用
- Java基础-高级特性-枚举实现状态机