1. 程式人生 > >設計模式之:靜態代理

設計模式之:靜態代理

靜態代理模式,完全就是由我們自己實現的代理方法,一般是用在方法呼叫前後需要做一些其他操作的情況下;

直接上程式碼:

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();
	}

把我們實際的實現類,以引數方法傳給靜態代理類的構造方法即可。

總結:靜態代理基於統一的介面程式設計,代理類也實現相同的介面,並通過在代理類中注入(一般通過建構函式)一個真實的介面實現,這樣,在呼叫代理類實現的介面方法時,方法內部其實是用真正的實現類去呼叫相應的方法。