public interface Italk {

創(chuàng)新互聯(lián)是一家專業(yè)提供邵武企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、html5、小程序制作等業(yè)務(wù)。10年已為邵武眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
public void talk(String msg);
} public class People implements Italk {
public String username;
public String age;
public String getName() {
return username;
}
public void setName(String name) {
this.username= name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public People(String name1, String age1) {
this.username= name1;
this.age = age1;
}
public void talk(String msg) {
System.out.println(msg+!你好,我是+username+,我年齡是+age);
}
} public class TalkProxy implements Italk {
Italk talker;
public TalkProxy (Italk talker) {
//super();
this.talker=talker;
}
public void talk(String msg) {
talker.talk(msg);
}
public void talk(String msg,String singname) {
talker.talk(msg);
sing(singname);
}
private void sing(String singname){
System.out.println(唱歌:+singname);
}
}
} public class MyProxyTest {
/**代理模式
* @param args
*/
public static void main(String[] args) {
//不需要執(zhí)行額外方法的
Italk people1=new People(湖海散人,18);
people1.talk(No ProXY Test);
System.out.println(-----------------------------);
//需要執(zhí)行額外方法的
TalkProxy talker=new TalkProxy(people1);
talker.talk(ProXY Test,七里香);
}
}
Java動(dòng)態(tài)代理機(jī)制的出現(xiàn),使得Java開發(fā)人員不用手工編寫代理類,只要簡單地制定一組接口及委托類對(duì)象,便能動(dòng)態(tài)地獲得代理類。代理類會(huì)負(fù)責(zé)將所有的方法調(diào)用分配到委托對(duì)象上反射執(zhí)行,配置執(zhí)行過程中,開發(fā)人員還可以進(jìn)行修改
代理設(shè)計(jì)模式
代理是一種常用的設(shè)計(jì)模式,其目的就是為其他對(duì)象提供一個(gè)代理以控制對(duì)某個(gè)對(duì)象的訪問。代理類負(fù)責(zé)為委托類預(yù)處理消息、過濾消息并轉(zhuǎn)發(fā)消息,以及進(jìn)行消息被委托類執(zhí)行后的后續(xù)處理。
為了保持行為的一致性,代理類和委托類通常會(huì)實(shí)現(xiàn)相同的接口
2. 引入代理能夠控制對(duì)委托對(duì)象的直接訪問,可以很好的隱藏和保護(hù)委托對(duì)象,也更加具有靈活性
代理機(jī)制及其特點(diǎn)
首先讓我們來了解一下如何使用 Java 動(dòng)態(tài)代理。具體有如下四步驟:
通過實(shí)現(xiàn) InvocationHandler 接口創(chuàng)建自己的調(diào)用處理器;
通過為 Proxy 類指定 ClassLoader 對(duì)象和一組 interface 來創(chuàng)建動(dòng)態(tài)代理類;
通過反射機(jī)制獲得動(dòng)態(tài)代理類的構(gòu)造函數(shù),其唯一參數(shù)類型是調(diào)用處理器接口類型;
通過構(gòu)造函數(shù)創(chuàng)建動(dòng)態(tài)代理類實(shí)例,構(gòu)造時(shí)調(diào)用處理器對(duì)象作為參數(shù)被傳入。
代理類實(shí)例的一些特點(diǎn)?
每個(gè)實(shí)例都會(huì)關(guān)聯(lián)一個(gè)InvocationHandler(調(diào)用處理器對(duì)象),在代理類實(shí)例上調(diào)用其代理接口中聲明的方法時(shí),最終都會(huì)由InvocationHandler的invoke方法執(zhí)行;
java.lang.Object中有三個(gè)方法也同樣會(huì)被分派到調(diào)用處理器的 invoke 方法執(zhí)行,它們是 hashCode,equals 和 toString;
代碼示例
最后以一個(gè)簡單的動(dòng)態(tài)代理例子結(jié)束
這種不太像真正的代理模式吧?
倒像是模擬的.
net為代理類Proxy的對(duì)象,調(diào)用net.browse時(shí)首先調(diào)用net的check方法進(jìn)行一些檢測之類的工作然后才調(diào)用委托對(duì)象的browse方法進(jìn)行真正的業(yè)務(wù)處理,實(shí)際上最后總要執(zhí)行委托對(duì)象指定的方法的.
代理類主要為委托類預(yù)處理消息,過濾消息,然后把消息轉(zhuǎn)給委托類以及事后處理等.Proxy類并不真正實(shí)現(xiàn)服務(wù)的
Java提供的Proxy類和InvocationHandler接口提供生成動(dòng)態(tài)代理類
具體你可以看看java.lang.reflect下的那些類,接口,其實(shí)主要還是用到j(luò)ava的反射機(jī)制,很簡單的.
Real類實(shí)現(xiàn)了Network接口,雖然Proxy構(gòu)造方法參數(shù)類型為Network,java中實(shí)現(xiàn)了某接口的類都是可以直接轉(zhuǎn)換為接口類型的.
Network real=new Real();
所以可以直接傳遞一個(gè)Real類的實(shí)例化對(duì)象.
this.network.browse() ; 實(shí)際上就是調(diào)用Real類的實(shí)例化對(duì)象的browse方法.
代理模式的作用是:為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問。在某些情況下,一個(gè)客戶不想或者不能直接引用另一個(gè)對(duì)象,而代理對(duì)象可以在客戶端和目標(biāo)對(duì)象之間起到中介的作用。
當(dāng)前題目:java代理模式實(shí)現(xiàn)代碼 java代理模式實(shí)現(xiàn)代碼是什么
分享地址:http://chinadenli.net/article24/hijpce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、標(biāo)簽優(yōu)化、外貿(mào)建站、定制網(wǎng)站、面包屑導(dǎo)航、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)