java 靜態代理模式
阿新 • • 發佈:2018-12-18
代理模式:為其他物件提供一種代理以控制對這個物件的訪問。說白了就是"真實物件"的代表,在訪問物件時引入一定程度的間接性,因為這種間接性可以附加多種用途。 代理,可以理解為 我們生活中的代購、律師、中介。把物件不必要的步驟交給其他物件來做,使本對向更加專注的完成某項工作。 加入我要去打水,我的目的是獲得水,但是必須需要一個桶來裝水,桶是我不關心的,但是必須要有,
程式碼例項:
- 我先定義一個介面,有開始工作的方法
package proxy;
interface IAction {
public void action();
}
- 定義一個使用者類來實現這個結口
package proxy;
public class UserAction implements IAction{
public void action() {
System.out.println("使用者開始工作了");
}
}
- 這時老闆想知道你工作持續了多長時間,而你正在廢寢忘食的工作,這時老闆找來了一個代理,來記錄你工作的時間,定義代理類
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));
}
}
- 測試類
package proxy;
public class Test {
public static void main(String[] args) {
IAction user = new ActionProxy(new UserAction());
user.action();
}
}
這時我們再來回顧一下定義:為其他物件提供一種代理以控制對這個物件的訪問。 和python的裝飾器類似,可以擴充套件不同的功能,但是比裝飾器功能更強大,他還可以限制物件的訪問,比如上面的代理類中,記錄使用者執行時間時 再加入一個使用者驗證 ,只有通過驗證的員工才可以真正的訪問。
類與介面的組合,和模板方法設計模式類似,但側重點不一樣,靜態代理模式更專注與控制。