設計模式之:靜態代理
阿新 • • 發佈:2018-12-16
靜態代理模式,完全就是由我們自己實現的代理方法,一般是用在方法呼叫前後需要做一些其他操作的情況下;
直接上程式碼:
1.定義代理介面
public interface MoveAble {
public void move();
}
其實就是定義一個普通的介面而已。
2.實現代理功能
public class CarProxy implements MoveAble { private MoveAble car; public CarProxy(MoveAble car) { super(); this.car = car; } @Override public void move() { long startTime = System.currentTimeMillis(); try { Thread.sleep(new Random().nextInt(1000)); car.move(); } catch (InterruptedException e) { e.printStackTrace(); } long endTime = System.currentTimeMillis(); System.out.println("汽車運行了" + (endTime - startTime) + "秒..."); } }
這一步驟最重要的就是帶參的構造方法了,
public CarProxy(MoveAble car) { super(); this.car = car; }
其實真正實現邏輯的,還是我們傳進來的實際物件例項,只是在呼叫真正的物件之前或者之後,做一些其他操作。
3.使用我們的靜態代理
@Test
public void testMove() {
MoveAble car = new Car();
CarProxy cp = new CarProxy(car);
cp.move();
}
把我們實際的實現類,以引數方法傳給靜態代理類的構造方法即可。
總結:靜態代理基於統一的介面程式設計,代理類也實現相同的介面,並通過在代理類中注入(一般通過建構函式)一個真實的介面實現,這樣,在呼叫代理類實現的介面方法時,方法內部其實是用真正的實現類去呼叫相應的方法。