代理模式
静态代理
继承方式实现
public interface Moveable {
void move();
}
public class Car implements Moveable {
@Override
public void move() {
try {
System.out.println(
"汽车行驶中...");
Thread.sleep(
new Random().nextInt(
1000));
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Car2 extends Car {
@Override
public void move() {
long startTime = System.currentTimeMillis();
System.out.println(
"汽车开始行驶");
super.move();
long endTime = System.currentTimeMillis();
System.out.println(
"结束行驶,行驶了"+(endTime-startTime)+
"ms");
}
}
public static void main(String[] args) {
Car2 car2 =
new Car2();
car2.move();
}
聚合方式实现
public class Car3 implements Moveable {
private Car car;
public Car3(Car car) {
super();
this.car = car;
}
@Override
public void move() {
long startTime = System.currentTimeMillis();
System.out.println(
"汽车开始行驶");
car.move();
long endTime = System.currentTimeMillis();
System.out.println(
"结束行驶,行驶了" + (endTime - startTime) +
"ms");
}
}
public static void main(String[] args) {
Car car =
new Car();
Moveable m =
new Car3(car);
m.move();
}
jdk动态代理
public class TimeHandler implements InvocationHandler {
private Object target;
public TimeHandler(Object target) {
super();
this.target = target;
}
/**
* @param proxy 被代理的对象
* @param method 被代理对象的方法
* @param args 方法的参数
* @return Object 方法的返回值
*/
@Override
public Object
invoke(Object proxy, Method method, Object[] args)
throws Throwable {
long startTime = System.currentTimeMillis();
System.out.println(
"汽车开始行驶");
method.invoke(target);
long endTime = System.currentTimeMillis();
System.out.println(
"结束行驶,行驶了"+(endTime-startTime)+
"ms");
return null;
}
}
public static void main(String[] args) {
Car car =
new Car();
InvocationHandler h =
new TimeHandler(car);
Class<?> c = car.getClass();
Moveable m = (Moveable) Proxy.newProxyInstance(c.getClassLoader(), c.getInterfaces(), h);
m.move();
}
转载请注明原文地址: https://ju.6miu.com/read-665085.html