靜態代理
注意:需要實現相同接口
public interface Moveable {
void move();
}
具體實現的功能
public class Tank implements Moveable{
@Override
public void move() {
System.out.println("移動 業務執行");
}
}
打印日誌的代理類
public class LogProxy implements Moveable {
public LogProxy(Moveable m) {
super();
this.m = m;
}
Moveable m;
@Override
public void move() {
System.out.println("日誌開始");
m.move();
System.out.println("日誌結束");
}
}
計算運行時間的代理類
public class TimeProxy implements Moveable {
public TimeProxy(Moveable m) {
super();
this.m = m;
}
Moveable m;
@Override
public void move() {
long start = System.currentTimeMillis();
System.out.println("開始時間"+start);
m.move();
long end = System.currentTimeMillis();
System.out.println("用時:"+(end-start));
}
}
測試, 當前爲 執行業務外包裹日誌打印, 最外層包裹時間計算
註釋代碼相反 : 業務外包裹時間計算,最外層日誌打印
public class Client {
public static void main(String[] args) {
Tank t = new Tank();
LogProxy logProxy = new LogProxy(t);
TimeProxy timeProxy = new TimeProxy(logProxy);
timeProxy.move();
// TimeProxy timeProxy = new TimeProxy(t);
// LogProxy logProxy = new LogProxy(timeProxy);
// logProxy.move();
}
}
運行結果如下
開始時間1541510417882
日誌開始
移動 業務執行
日誌結束
用時:1