簡述:
為其他對象提供一種代理,以控制對這個對象的訪問。
代理對象起到中介的作用,可以去掉某些功能,也可以增加某些功能。
常見的代理模式:
虛擬代理:
當(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毫秒!