静态代理:
静态代理有代理对象和被代理对象,它们都实现了相同的接口或继承了相同的抽象类。
代理对象持有被代理对象的引用,并且通过构造函数对被代理对象初始化。
代码示例:
interface Moveable {
void move();
}
class Tank implements Moveable{
public void move(){
System.out.println("move......");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//静态代理类,增强了真实角色的move()方法的功能
class TankTimeProxy implements Moveable{
Moveable t; //持有真是角色的引用
public TankTimeProxy(Moveable t){
this.t = t;
}
public void before(){
long start = System.currentTimeMillis();
System.out.println("计算时间开始:"+start);
}
public void after(){
long end = System.currentTimeMillis();
System.out.println("结束时间: "+end);
}
public void move(){
before();
t.move(); //真实角色调用自己的方法
after();
}
}
public class ProxyStatic {
public static void main(String[] args) {
Tank tank = new Tank();
//日志包裹时间
TankTimeProxy ti = new TankTimeProxy(tank);
ti.move();
}
}
说明:被代理类Tank,代理类TankTimeProxy,它们都实现了Moveable接口,被代理类重写了Moveable接口的方法move,代理类持有了被代理类的引用,并重写了move方法,move方法中除了被代理类中的move方法的功能外,还做了方法的增强。代理模式的好处 ,在不修改被代理类方法的基础上,对被代理类的功能做了增强。