1. 程式人生 > >java 靜態代理模式

java 靜態代理模式

  代理模式:為其他物件提供一種代理以控制對這個物件的訪問。說白了就是"真實物件"的代表,在訪問物件時引入一定程度的間接性,因為這種間接性可以附加多種用途。    代理,可以理解為 我們生活中的代購、律師、中介。把物件不必要的步驟交給其他物件來做,使本對向更加專注的完成某項工作。    加入我要去打水,我的目的是獲得水,但是必須需要一個桶來裝水,桶是我不關心的,但是必須要有,

   程式碼例項

  1. 我先定義一個介面,有開始工作的方法
package proxy;

interface IAction {
	public void action();	
}
  1. 定義一個使用者類來實現這個結口
package proxy;

public class UserAction implements IAction{
	public void action() {
		System.out.println("使用者開始工作了");
	}
}
  1. 這時老闆想知道你工作持續了多長時間,而你正在廢寢忘食的工作,這時老闆找來了一個代理,來記錄你工作的時間,定義代理類
package proxy;

public class ActionProxy implements IAction{
	private IAction target; //宣告被代理的物件(範圍越大越好,所謂的多型)
	//建立一個構造方法
public ActionProxy(IAction target) { this.target = target; } // 實現抽象方法 public void action() { long startTime = System.currentTimeMillis(); //定義開始的時間戳 target.action(); long endTime = System.currentTimeMillis(); //定義結束的時間戳 System.out.println("共耗時"+(endTime-startTime)); } }
  1. 測試類
package
proxy; public class Test { public static void main(String[] args) { IAction user = new ActionProxy(new UserAction()); user.action(); } }

   這時我們再來回顧一下定義:為其他物件提供一種代理以控制對這個物件的訪問。    和python的裝飾器類似,可以擴充套件不同的功能,但是比裝飾器功能更強大,他還可以限制物件的訪問,比如上面的代理類中,記錄使用者執行時間時 再加入一個使用者驗證 ,只有通過驗證的員工才可以真正的訪問。

   類與介面的組合,和模板方法設計模式類似,但側重點不一樣,靜態代理模式更專注與控制。