靜態代理模式:這種模式可以實現幫助被代理者完成一些前期的准備工作和后期的善后工作,但是核心的業務邏輯仍然是由被代理者完成。
代碼結構由三部分組成
(1)接口:主題
(2)代理類
(3)被代理類
實現方式:代理類和被代理類要實現同一個主題接口,而且代理類中要有一個被代理類的屬性(target),這樣才能把核心業務邏輯交還給被代理類完成;而一些與核心業務邏輯無關的邏輯,並且需求是多變的,那么這些邏輯就可以交給代理類來完成
示例
需求:計算add()的運行時間
public class StaticProxyPattern {
public static void main(String[] args) {
//使用代理者和被代理者來完成任務
User user = new User();//被代理者對象
UserProxy userProxy = new UserProxy(user);//代理者對象
userProxy.add();
}
}
//聲明接口
interface FeatureDAO {
public abstract void add();
}
//被代理類
class User implements FeatureDAO {
@Override
public void add() {
System.out.println("執行核心邏輯........");
}
}
//代理類
class UserProxy implements FeatureDAO {
private User target;
public UserProxy(User target) {
this.target = target;
}
@Override
public void add() {
System.out.println("add方法開始執行........");
long startTime = System.currentTimeMillis();
target.add();
long endTime = System.currentTimeMillis();
System.out.println("耗時:" + (endTime-startTime));
System.out.println("add方法結束執行........");
}
}