激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

香港云服务器
服務器之家 - 編程語言 - Java教程 - Java設計模式之動態代理模式實例分析

Java設計模式之動態代理模式實例分析

2021-04-24 10:31aronykl Java教程

這篇文章主要介紹了Java設計模式之動態代理模式,結合實例形式分析了動態代理模式的概念、功能、組成、定義與使用方法,需要的朋友可以參考下

本文實例講述了java設計模式動態代理模式。分享給大家供大家參考,具體如下:

前面介紹了靜態代理模式,動態代理比靜態代理模式更加強大。它能在程序運行時動態的生成代理對象。所謂動態代理類是在運行時生成的class,在生成它時,你必須提供一組interface給它,則動態代理類就宣稱它實現了這些interface。當然,動態代理類就充當一個代理,你不要企圖它會幫你干實質性的工作,在生成它的實例時你必須提供一個handler,由它接管實際的工作。

動態代理的角色和靜態代理的角色一樣:

① 抽象角色:真實對象和代理對象的共同接口。其中聲明真實對象和代理對象需要做的事。
② 真實角色:實現抽象角色,定義真實角色所要實現的業務邏輯,供代理角色調用。
③ 動態代理角色:需要實現invocationhandler接口,并且實現其中的invoke方法。動態代理覺得持有一個object類型引用,這個表示需要動態代理的角色。定義為object類型,表示可動態代理任何類型的對象。

以下給出一個簡單的動態代理模式的簡單的代碼實例:

1. 抽象角色:真實對象和代理對象的共同接口。其中聲明真實對象和代理對象需要做的事。

?
1
2
3
4
package com.tydic.dynamicproxy;
public interface subject {
  public void request();
}

2. 真實角色:需要實現抽象角色,是被代理的對象。

?
1
2
3
4
5
6
7
package com.tydic.dynamicproxy;
public class realsubject implements subject {
  @override
  public void request() {
    system.out.println("from real subject!");
  }
}

3. 動態代理角色:需要實現invocationhandler接口,并重寫接口里面的invoke方法public object invoke(object proxy, method method, object[] args)。invoke方法有三個參數。參數proxy指代理類,method表示被代理的方法,args為method中的參數數組,返回值object為代理實例的方法調用返回的值。這個抽象方法在代理類中動態實現。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.tydic.dynamicproxy;
import java.lang.reflect.invocationhandler;
import java.lang.reflect.method;
public class dynamicsubject implements invocationhandler {
  private object sub;//被代理的對象
  public dynamicsubject(object obj) {
    this.sub = obj;
  }
  @override
  public object invoke(object proxy, method method, object[] args)
      throws throwable {
    system.out.println("before calling:" + method);
    //可以在被代理的方法前后添加功能
    method.invoke(sub, args);
    system.out.println("after calling:" + method);
    return null;
  }
}

4. 編寫客戶端代碼:需要用到一個proxy類。proxy類所有動態代理類的父類,提供用于創建動態代理類和實例的靜態方法。proxy類有一個靜態方法public static object newproxyinstance(classloader loader,  class<?>[] interfaces,  invocationhandler h)。第一個參數表示動態代理類的類加載器,第二個是動態代理類應該要實現的接口的class數組,第三個參數是invocationhandler 對象,當動態代理調用需要代理的方法時,invocationhandler 對象的invoke方法會得到調用。

?
1
2
3
4
5
6
7
8
9
10
11
package com.tydic.dynamicproxy;
import java.lang.reflect.proxy;
public class client {
  public static void main(string[] args) {
    subject subject = new realsubject();
    dynamicsubject handle = new dynamicsubject(subject);
    //動態的生成代理對象
    subject sub = (subject) proxy.newproxyinstance(dynamicsubject.class.getclassloader(), subject.getclass().getinterfaces(), handle);
    sub.request();//實際是handle的invoke方法得到了調用
  }
}

希望本文所述對大家java程序設計有所幫助。

原文鏈接:https://blog.csdn.net/zw19910924/article/details/45228125

延伸 · 閱讀

精彩推薦
943
主站蜘蛛池模板: 久久精品日韩一区 | 国产精品久久久久久久久久尿 | 欧美性受xxxxxx黑人xyx性爽 | 一区二区三区无码高清视频 | 日本精品二区 | 久久久视频免费观看 | 91看点 | 精品国产一区二区三区久久久蜜月 | 成人午夜激情网 | 欧美人一级淫片a免费播放 久久久久久久久91 国产99久久久久久免费看 | 日韩精品一区二 | 国产毛片在线高清视频 | 一级做a爱性色毛片免费1 | 九九热精品视频在线 | 国产宾馆3p国语对白 | 欧美一级黄色影院 | 亚洲一区二区三区四区精品 | wwwxxx国产| 最近免费观看高清韩国日本大全 | 国产一区二区精彩视频 | 色女人在线 | 日韩黄站| 手机视频在线播放 | 久久恋 | 9999免费视频 | 欧美羞羞视频 | 久久综合综合久久 | 欧美zoofilia杂交videos| 在线日韩在线 | h视频免费看 | 国产成人在线观看网站 | 国产一区二区免费在线观看 | 91精品国产99久久久久久红楼 | 久久在线精品视频 | 免费视频精品一区二区 | 欧美videofree性欧美另类 | 最新欧美精品一区二区三区 | 国产高潮好爽好大受不了了 | 202z中文字幕第一页 | 欧美精品激情视频 | 一级做a爱片久久毛片a高清 |