亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

模式的秘密---代理模式

難度中級
時長 2小時 0分
學習人數
綜合評分9.70
184人評價 查看評價
9.8 內容實用
9.6 簡潔易懂
9.7 邏輯清晰
  • 智能引用代理
    查看全部
  • 保護代理
    查看全部
  • 虛擬代理
    查看全部
  • 遠程代理
    查看全部
  • 代理模式分類: 遠程代理,虛擬代理,職能代理,保護代理
    查看全部
  • 代理模式基本概念
    查看全部
  • 代理模式定義:為其他對象提供一種代理以控制對這個對象的訪問
    查看全部
  • 動態代理步驟
    查看全部
  • 本節看不太懂
    查看全部
  • 本節看不太懂
    查看全部
  • *靜態代理:代理和被代理對象在代理之前是確定的,實現了相同的接口或抽象類 *靜態代理實現方式:繼承和聚合 *繼承:創建一個類(代理類)繼承被代理類(實現相同的接口),在代理類中調用父類的被代理方法,在方法的前后增加代理的業務邏輯 *聚合:一個類中調用另一個類的對象(兩者實現相同接口)。在代理類中聲明被代理類的對象,并通過構造方法將對象傳進來(初始化)。在代理類的接口方法中調用被代理類對象的方法,并在方法前后增加相應代理業務邏輯。
    查看全部
  • 測試代理類 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
提交
取消
課程須知
本課程是 Java 開發課程的高級課程,希望各位小伙伴們在學習本課程之前,了解以下內容: 1)初步具備面向對象的設計思維 2)了解多態概念 3)了解反射
老師告訴你能學到什么?
1、代理模式概念機分類 2、代理模式應用場景 3、掌握靜態代理、動態代理運用 4、理解JDK動態代理實現原理

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!