權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處,歡迎交流學(xué)習(xí)!
有這樣一種場(chǎng)景,有一個(gè)實(shí)現(xiàn)類實(shí)現(xiàn)了某種功能,這個(gè)實(shí)現(xiàn)類我們無法修改或者不允許被修改,但是除了實(shí)現(xiàn)類里的功能我們還需要擴(kuò)展其他的功能,這種情況時(shí)我們?cè)撛趺崔k呢?我們可以創(chuàng)建一個(gè)代理類,在代理類里調(diào)用實(shí)現(xiàn)類里的功能并且在代理類中擴(kuò)展我們需要的功能,客戶端直接調(diào)用代理類而不需要關(guān)心實(shí)現(xiàn)類,這就是代理模式的思想。簡(jiǎn)單來說,代理模式的本質(zhì)就是創(chuàng)建一個(gè)代理,代理類在原有類的行為基礎(chǔ)上再加上一個(gè)額外的行為,甚至是替換掉原有類的行為,返回一個(gè)代理供客戶端調(diào)用。
舉一個(gè)生活中常見的例子,我們平時(shí)去房產(chǎn)中介公司租房,房產(chǎn)中介提供出租房子的功能,但是房產(chǎn)中介本身并沒有房子,房子是房東委托給中介公司,授權(quán)給他出租,租房者不需要關(guān)心房東的信息或者說無法獲得房東的信息,只需要直接向房產(chǎn)中介獲取租房信息??赡苓@個(gè)例子不是很恰當(dāng),但是它反映了代理模式的思想。房東具有出租房屋的功能,房東直接跟中介交互并把這種功能委托給中介,因此中介具有了出租房屋的功能,并且額外加入收取中介費(fèi)的功能,租房者直接跟中介交互通過中介獲得房東出租房屋的功能。
代理模式中有以下幾個(gè)角色:
1)抽象角色:聲明真實(shí)對(duì)象和代理對(duì)象的共同接口;
2)代理角色:代理角色內(nèi)部有對(duì)真實(shí)角色的引用,因此可以操作真實(shí)對(duì)象的功能;代理對(duì)象和真實(shí)對(duì)象實(shí)現(xiàn)相同的接口,以便在任何時(shí)候都可以代替真實(shí)對(duì)象;代理對(duì)象可以在執(zhí)行真實(shí)對(duì)象的操作時(shí),加上一些額外的操作,相當(dāng)于對(duì)真實(shí)對(duì)象進(jìn)行封裝;
3)真實(shí)角色:代理角色所代表的對(duì)象,是我們最終要操作的對(duì)象。
在上面的舉例中,抽象角色就是出租房屋這一功能,房東就相當(dāng)于真實(shí)角色,實(shí)現(xiàn)了抽象角色這一接口,具有了出租房屋的功能,房產(chǎn)中介就相當(dāng)于代理角色,他引用了真實(shí)角色出租房屋的功能,并且額外加上了收取中介費(fèi)的功能。
代理模式可以分為兩種:延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式