十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
Java的三種代理模式簡述
成都創(chuàng)新互聯(lián)成立與2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元門頭溝做網(wǎng)站,已為上家服務(wù),為門頭溝各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
本文著重講述三種代理模式在java代碼中如何寫出,為保證文章的針對性,暫且不討論底層實現(xiàn)原理,具體的原理將在下一篇文章中講述。
代理模式是什么
代理模式是一種設(shè)計模式,簡單說即是在不改變源碼的情況下,實現(xiàn)對目標對象的功能擴展。
比如有個歌手對象叫Singer,這個對象有一個唱歌方法叫sing()。
假如你希望,通過你的某種方式生產(chǎn)出來的歌手對象,在唱歌前后還要想觀眾問好和答謝,也即對目標對象Singer的sing方法進行功能擴展。
但是往往你又不能直接對源代碼進行修改,可能是你希望原來的對象還保持原來的樣子,又或許你提供的只是一個可插拔的插件,甚至你有可能都不知道你要對哪個目標對象進行擴展。這時就需要用到j(luò)ava的代理模式了。網(wǎng)上好多用生活中的經(jīng)理人的例子來解釋“代理”,看似通俗易懂,但我覺得不適合程序員去理解。程序員應該從代碼的本質(zhì)入手。
代理模式的作用是:為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個客戶不想或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。
public interface Italk {
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,七里香);
}
}