-
相關代碼——(下): @TestJDKProxy.java public class TestJDKProxy { /** * JDK動態代理測試類 */ public static void main(String[] args) { Car car=new Car(); InvocationHandler h=new TimeHandler(car); Class<?> cls=car.getClass(); /** * 參數:loader:類加載器;interface:實現接口;h:InvocationHandler。 */ Moveable m=(Moveable) Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), h); m.move(); m.move1(); /** * 執行順序:m.move()后先執行TimeHandler類中的invoke()方法, * 當執行到method.invoke(target);時,再去執行目標類Car的move()方法, * 然后返回method.invoke(target);的下一句,最后返回這里執行完畢。 */ } } @Moveable.java public interface Moveable { void move(); void move1(); } 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
相關代碼——(上): @Car.java public class Car implements Moveable{ public void move() { //實現打車 try { Thread.sleep(new Random().nextInt(1000)); System.out.println("車行駛中..."); } catch (Exception e) { e.printStackTrace(); } } public void move1() { // TODO Auto-generated method stub System.out.println("move1"); } } @TimeHandler.java public class TimeHandler implements InvocationHandler { private Object target; public TimeHandler(Object target) { super(); this.target = target; } /** * 參數: * proxy:被代理對象;method:被代理對象的方法;args:方法的參數。 * 返回值: * Object:方法的返回值。 */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { long starttime=System.currentTimeMillis(); System.out.println("車開始行駛..."); method.invoke(target);//通過反射機制:Method是一個方法,方法對象。Method.Invoke()相當于method(); long endtime=System.currentTimeMillis(); System.out.println("車結束行駛。"); System.out.println("車行駛時間:"+(endtime-starttime)+"毫秒!"); return null; } }查看全部
-
相關代碼——(下): @Client.java public class Client { /** * 測試類 */ public static void main(String[] args) { Car car=new Car(); /*CarTimeProxy ctp=new CarTimeProxy(car); CarLogProxy clp=new CarLogProxy(ctp); clp.move();*/ CarLogProxy clp=new CarLogProxy(car); CarTimeProxy ctp=new CarTimeProxy(clp); ctp.move(); } } 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
相關代碼——(上): @Car.java public class Car implements Moveable{ public void move() { //實現打車 try { Thread.sleep(new Random().nextInt(1000)); syso("車行駛中..."); } catch (Exception e) { ... } } } @Moveable.java public interface Moveable { void move(); } @CarLogProxy.java public class CarLogProxy implements Moveable { private Moveable m; public CarLogProxy(Moveable m){ super(); this.m=m; } public void move() { syso("日志開始..."); m.move(); syso("日志結束..."); } } @CarTimeProxy.java public class CarTimeProxy implements Moveable { private Moveable m; public CarTimeProxy(Moveable m){ super(); this.m=m; } public void move() { long starttime=System.currentTimeMillis(); syso("車開始行駛..."); m.move(); long endtime=System.currentTimeMillis(); syso("車結束行駛。"); syso("車行駛時間:"+(endtime-starttime)+"毫秒!"); } } 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
相關代碼(聚合方式:一個類中調用另一個類對象): @Client.java public class Client { /** * 測試類 */ public static void main(String[] args) { //使用聚合方式 Car car=new Car(); Moveable m=new Car3(car); m.move(); } } @Moveable.java public interface Moveable { void move(); } @Car.java public class Car implements Moveable{ public void move() { //實現打車 try { Thread.sleep(new Random().nextInt(1000)); System.out.println("車行駛中..."); } catch (Exception e) { e.printStackTrace(); } } } @Car3.java public class Car3 implements Moveable { private Car car; public Car3(Car car){ super(); this.car=car; } public void move() { long starttime=System.currentTimeMillis(); System.out.println("車開始行駛..."); car.move(); long endtime=System.currentTimeMillis(); System.out.println("車結束行駛。"); System.out.println("車行駛時間:"+(endtime-starttime)+"毫秒!"); } } 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
相關代碼(繼承方式): @Client.java public class Client { /** * 測試類 */ public static void main(String[] args) { //使用繼承方式 Moveable m=new Car2(); m.move(); } } @Car2.java public class Car2 extends Car{ @Override public void move() { long starttime=System.currentTimeMillis(); System.out.println("車開始行駛..."); super.move(); long endtime=System.currentTimeMillis(); System.out.println("車結束行駛。"); System.out.println("車行駛時間:"+(endtime-starttime)+"毫秒!"); } } @Moveable.java public interface Moveable { void move(); } @Car.java public class Car implements Moveable{ public void move() { //實現打車 try { Thread.sleep(new Random().nextInt(1000)); System.out.println("車行駛中..."); } catch (Exception e) { e.printStackTrace(); } } } 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
相關代碼(原始方式): @Car.java public class Car implements Moveable{ public void move() { long starttime=System.currentTimeMillis(); System.out.println("車開始行駛..."); //實現打車 try { Thread.sleep(new Random().nextInt(1000)); System.out.println("車行駛中..."); } catch (Exception e) { e.printStackTrace(); } long endtime=System.currentTimeMillis(); System.out.println("車結束行駛。"); System.out.println("車行駛時間:"+(endtime-starttime)+"毫秒!"); } } @Moveable.java public interface Moveable { void move(); } @Client.java public class Client { /** * 測試類 */ public static void main(String[] args) { Car car=new Car(); car.move(); } } 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
@智能引用代理的應用 代理模式定義:為其他對象提供一種代理,以控制對這個對象的訪問(例如火車站代售處)。代理對象起到中介作用,可去掉功能服務或增加額外的服務。 代理模式分類: 1、遠程代理(Remote Proxy)——為不同地理的對象提供局域網代表對象。(類似于客戶端和服務器端) 2、虛擬代理(Virtual Proxy)——根據需要將資源消耗很大的對象進行延遲,真正需要的時候才進行創建。(網頁中圖片的加載,先用一張虛擬的圖片進行顯示,等圖片加載完成后再進行顯示) 3、保護代理(Protect Proxy)——控制用戶的訪問權限。(發帖功能) 4、智能引用代理(Smart Reference Proxy)——提供對目標對象一些額外的服務。(火車站代售處為火車站代理) 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
@保護代理的應用 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
@虛擬代理的應用 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
@遠程代理的應用 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關注我,加我慕課好友,互相學習,共同進步!】查看全部
-
動態代理實現步驟查看全部
-
AOP查看全部
-
設計理念查看全部
-
動態代理的實現步驟查看全部
舉報
0/150
提交
取消