-
智能引用代理查看全部
-
保護代理查看全部
-
虛擬代理查看全部
-
遠程代理查看全部
-
代理模式分類: 遠程代理,虛擬代理,職能代理,保護代理查看全部
-
代理模式基本概念查看全部
-
代理模式定義:為其他對象提供一種代理以控制對這個對象的訪問查看全部
-
動態代理步驟查看全部
-
本節看不太懂查看全部
-
本節看不太懂查看全部
-
*靜態代理:代理和被代理對象在代理之前是確定的,實現了相同的接口或抽象類 *靜態代理實現方式:繼承和聚合 *繼承:創建一個類(代理類)繼承被代理類(實現相同的接口),在代理類中調用父類的被代理方法,在方法的前后增加代理的業務邏輯 *聚合:一個類中調用另一個類的對象(兩者實現相同接口)。在代理類中聲明被代理類的對象,并通過構造方法將對象傳進來(初始化)。在代理類的接口方法中調用被代理類對象的方法,并在方法前后增加相應代理業務邏輯。查看全部
-
測試代理類 Car car=new Car(); InvocationHandler handler=new TimeHandler(car);//為car對象設置代理 Class<?> carClass= car.getClass(); //獲取被代理類的類類型 /** * 使用Proxy.newInstance * 三個參數 * 1. 被代理類的類加載器 * 2. 被代理類的所有接口 類類型 * 3. InvocationHandler 實現了InvocationHandler接口的對象 */ Moveable moveable= (Moveable) Proxy.newProxyInstance(carClass.getClassLoader(), carClass.getInterfaces(), handler); moveable.move();查看全部
-
JDK實現動態代理,即可以為任何對象增加功能 示例:代理類的實現 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** *使用jdk提供的invocationHandler接口實現動態代理 * 實現對任何類(不僅限于Moveable)的記錄時間操作。 */ public class TimeHandler implements InvocationHandler { private Object target; //定義一個Object,代表被代理的對象 public TimeHandler(Object target) { this.target=target; } /** * 1. 實現InvocationHandler接口,并重寫invoke方法 * @param proxyObj 生成的代理對象。 * @param method 要代理的方法 * @param args 代理方法的參數 * @return 代理方法返回的返回值 */ @Override public Object invoke(Object proxyObj, Method method, Object[] args) throws Throwable { long start = System.currentTimeMillis(); System.out.println("小車開始行駛。。。"); Object returnObj= method.invoke(target); //執行原有方法。如果方法有參數,作為invoke第二參數傳入 long end=System.currentTimeMillis(); System.out.println("小車結束行駛。。。時間"+(end-start)); return returnObj; //將被代理方法的返回值返回。 } }查看全部
-
靜態代理----使用聚合(組合)方式 /** * 使用 聚合方式 實現代理 * 優點:比較靈活(推薦使用),比如:可以任意改變順序 */ public class CarTimeProxy implements Moveable { private Moveable car; //聲明一個要代理的對象 public CarTimeProxy(Moveable car) { this.car = car; } /** * 代理該對象,實現記錄時間 */ @Override public void move() { long start = System.currentTimeMillis(); System.out.println("小車開始行駛。。。"); car.move(); long end=System.currentTimeMillis(); System.out.println("小車結束行駛。。。時間"+(end-start)); } }查看全部
-
靜態代理---繼承方式 實現代理 /** * 使用繼承的方式為車對象實現代理方式 * 缺點:不夠靈活,比如:如果要增加代理,而這些代理的先后順序不確定。就要構建出很多代理類。 */ public class CarTimeProxy extends Car { /** * 重寫父類的move方法。在前后增加 記錄時間 代碼,實現汽車代理 */ @Override public void move() { long start=System.currentTimeMillis(); System.out.println("小車開始行駛。。。"); super.move();//執行父類執行的函數 long end=System.currentTimeMillis(); System.out.println("小車結束行駛。。。時間"+(end-start)); } }查看全部
舉報
0/150
提交
取消