日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

java23种设计模式之五:代理模式

發(fā)布時(shí)間:2023/12/15 asp.net 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java23种设计模式之五:代理模式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.代理模式介紹

??  代理模式的定義:就是為一個(gè)接品(對(duì)象)提供一個(gè)代理的對(duì)象,并由這個(gè)代理對(duì)象控制對(duì)原對(duì)象的訪問(wèn)流程

   其中代理又分為:靜態(tài)代理和動(dòng)態(tài)代理

?     靜態(tài)代理:指的是自己要寫(xiě)一個(gè)代理類(lèi),或者用工具生成一個(gè)代理類(lèi),總之就是程序運(yùn)行之前已經(jīng)存且編譯好的代理類(lèi).(自己寫(xiě)的類(lèi))
     動(dòng)態(tài)代理:指由JVM虛擬機(jī)程序運(yùn)行時(shí)產(chǎn)生的代理類(lèi)。(jvm或第三方生成的類(lèi))

  動(dòng)態(tài)類(lèi)具有更強(qiáng)的靈活性,它不用在我們?cè)O(shè)計(jì)實(shí)現(xiàn)類(lèi)時(shí)指定哪個(gè)類(lèi)被代理了。

二.動(dòng)態(tài)代理

  覆蓋InvocationHandler接口中的invoke()方法,更重要的是,動(dòng)態(tài)代理模式可以使得我們?cè)诓桓淖冊(cè)瓉?lái)已有的代碼結(jié)構(gòu)的情況下,對(duì)原來(lái)的原有進(jìn)行擴(kuò)展、增強(qiáng)其功能,并且可以達(dá)到控制被代理對(duì)象的行為。

  每一個(gè)動(dòng)態(tài)代理類(lèi)都必須要實(shí)現(xiàn)InvocationHandler這個(gè)接口,并且每個(gè)代理類(lèi)的實(shí)例都關(guān)聯(lián)到了一個(gè)handler,當(dāng)我們通過(guò)代理對(duì)象調(diào)用一個(gè)方法的時(shí)候,這個(gè)方法的調(diào)用就會(huì)被轉(zhuǎn)發(fā)為由InvocationHandler這個(gè)接口的 invoke 方法來(lái)進(jìn)行調(diào)用。

public class DynamicProxy implements InvocationHandler{// 被代理類(lèi)的實(shí)例 Object proxy;public DynamicProxy(Object proxy) {this.proxy = proxy;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object result = method.invoke(this.proxy, args);return null;}}public interface ProxySSSS {public void buyCar(int cash); }public class User implements ProxyInterface{private int cash; //花費(fèi)private String name;public User(int cash,String name){this.cash = cash;this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getCash() {return cash;}public void setCash(int cash) {this.cash = cash;}public void buyCar() {System.out.println("花 "+cash +"錢(qián)買(mǎi)車(chē)");}}

動(dòng)態(tài)代理測(cè)試類(lèi)

public class MainTest {public static void main(String[] args) {User user = new User("張三",1000);InvocationHandler handler = new DynamicProxy(user);/*** 每一個(gè)動(dòng)態(tài)代理類(lèi)都必須要實(shí)現(xiàn)InvocationHandler這個(gè)接口,并且每個(gè)代理類(lèi)的實(shí)例都關(guān)聯(lián)到了一個(gè)handler,當(dāng)我們通過(guò)代理對(duì)象調(diào)用一個(gè)方法的時(shí)候,這個(gè)方法的調(diào)用就會(huì)被轉(zhuǎn)發(fā)為由InvocationHandler這個(gè)接口的 invoke 方法來(lái)進(jìn)行調(diào)用。我們來(lái)看看InvocationHandler這個(gè)接口的唯一一個(gè)方法 invoke 方法:* Proxy.newProxyInstance 3個(gè)參數(shù)的意思:* handler.getClass().getClassLoader() : 獲取代理類(lèi)的加載 器來(lái)加載動(dòng)態(tài)代理類(lèi)對(duì)象* user.getClass().getInterfaces() : 該對(duì)象的方法就是代理類(lèi)所代理的方法* handler : InvocationHandler 對(duì)象*/ProxySSSS instance = (ProxySSSS)Proxy.newProxyInstance(handler.getClass().getClassLoader(), user.getClass().getInterfaces(), handler);instance.buyCar(user.getCash());} }

?

  

轉(zhuǎn)載于:https://www.cnblogs.com/MrRightZhao/p/10815311.html

總結(jié)

以上是生活随笔為你收集整理的java23种设计模式之五:代理模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。