設計模式學習筆記31: 代理模式(Proxy)

靜態代理

注意:需要實現相同接口

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章