java靜態(tài)代理模式

簡述:
為其他對象提供一種代理,以控制對這個對象的訪問。
代理對象起到中介的作用,可以去掉某些功能,也可以增加某些功能。

常見的代理模式:
虛擬代理:
當(dāng)我們在瀏覽帖子的時候,很多帖子的圖片剛開始都是默認(rèn)網(wǎng)站logo,當(dāng)圖片加載完成的時候才會去顯示出來,在圖片被加載的時候,也不會影響我們?nèi)タ次淖帧?/p>

代理模式分為靜態(tài)代理和動態(tài)代理。

靜態(tài)代理:
代理和被代理對象在代理之前是確定的,他們都實現(xiàn)相同的接口或者繼承相同的抽象類。


下面我們用靜態(tài)代理做一個小Demo
假如我們有一輛車,然后我們通過靜態(tài)代理來記錄這輛車行駛的時間。

首先寫一個汽車的接口,增加行駛的方法:

public interface Moveable {

    //增加一個行駛的接口
    void move();
}

創(chuàng)建汽車類,實現(xiàn)move方法:

public class Car implements Moveable {

    @Override
    public void move() {

        //實現(xiàn)開車,開車時間為1秒鐘
        try {
            Thread.sleep(new Random().nextInt(1000));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

最后我們創(chuàng)建一個Car2類,繼承Car類,重寫move()方法,并且在實現(xiàn)的前后增加業(yè)務(wù):

    @Override
    public void move() {
        long starttime = System.currentTimeMillis();
        System.out.println("汽車開始行駛...");
        super.move();
        long endtime = System.currentTimeMillis();
        System.out.println("汽車結(jié)束行駛...");
        System.out.println("汽車行駛時間:" + (endtime - starttime) + "毫秒!");
    }

    public static void main(String[] args) {
        Moveable m = new Car2();
        m.move();
    }
}

輸出結(jié)果:

汽車開始行駛...
汽車結(jié)束行駛...
汽車行駛時間:868毫秒!

以上也就是用繼承的方法,簡單的實現(xiàn)靜態(tài)代理,在汽車行駛的時候增加記錄時間的業(yè)務(wù),但不推薦用繼承的方法實現(xiàn)代理,如果業(yè)務(wù)邏輯很多的話,代碼也會無限的膨脹下去。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容