静态代理2种模式
1,通过继承来代理类:不够灵活,如果需要多个代理,就需要多层次的继承。
2,通过聚合来进行代理:相比继承代理提高了灵活性,多个代理时可以自由组合。
-------------------被代理的类----------------
package com.proxy.demo;
import java.util.Random;
public class Tank implements Moveable {
public void move() {
try {
Thread.sleep(new Random().nextInt(1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("tank move");
}
}
--------------------继承代理-------------------------
package com.proxy.demo;
/**
* 通过继承来实现了对Tank的代理 缺乏灵活性
* 如果要增加多层代理,就需要对该类再次进行继承
*/
public class ProxyTankByExtends extends Tank {
public void move() {
Long start = System.currentTimeMillis();
super.move();
Long end = System.currentTimeMillis();
System.out.println("run time : " + (end - start));
}
}
----------------使用聚合代理-------------------------
package com.proxy.demo;
/**
* 使用聚合进行类的代理
* 多个代理同时进行时可以自由组合
*/
public class TankLogProxy implements Moveable {
private Moveable m;
public TankLogProxy(Moveable m) {
super();
this.m = m;
}
public void move() {
System.out.println("start move");
m.move();
System.out.println("end move");
}
}