權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請注明出處,歡迎交流學(xué)習(xí)!

      有這樣一種場景,有一個實現(xiàn)類實現(xiàn)了某種功能,這個實現(xiàn)類我們無法修改或者不允許被修改,但是除了實現(xiàn)類里的功能我們還需要擴展其他的功能,這種情況時我們該怎么辦呢?我們可以創(chuàng)建一個代理類,在代理類里調(diào)用實現(xiàn)類里的功能并且在代理類中擴展我們需要的功能,客戶端直接調(diào)用代理類而不需要關(guān)心實現(xiàn)類,這就是代理模式的思想。簡單來說,代理模式的本質(zhì)就是創(chuàng)建一個代理,代理類在原有類的行為基礎(chǔ)上再加上一個額外的行為,甚至是替換掉原有類的行為,返回一個代理供客戶端調(diào)用。

      舉一個生活中常見的例子,我們平時去房產(chǎn)中介公司租房,房產(chǎn)中介提供出租房子的功能,但是房產(chǎn)中介本身并沒有房子,房子是房東委托給中介公司,授權(quán)給他出租,租房者不需要關(guān)心房東的信息或者說無法獲得房東的信息,只需要直接向房產(chǎn)中介獲取租房信息??赡苓@個例子不是很恰當(dāng),但是它反映了代理模式的思想。房東具有出租房屋的功能,房東直接跟中介交互并把這種功能委托給中介,因此中介具有了出租房屋的功能,并且額外加入收取中介費的功能,租房者直接跟中介交互通過中介獲得房東出租房屋的功能。

      代理模式中有以下幾個角色:

      1)抽象角色:聲明真實對象和代理對象的共同接口;

      2)代理角色:代理角色內(nèi)部有對真實角色的引用,因此可以操作真實對象的功能;代理對象和真實對象實現(xiàn)相同的接口,以便在任何時候都可以代替真實對象;代理對象可以在執(zhí)行真實對象的操作時,加上一些額外的操作,相當(dāng)于對真實對象進(jìn)行封裝;

      3)真實角色:代理角色所代表的對象,是我們最終要操作的對象。

      在上面的舉例中,抽象角色就是出租房屋這一功能,房東就相當(dāng)于真實角色,實現(xiàn)了抽象角色這一接口,具有了出租房屋的功能,房產(chǎn)中介就相當(dāng)于代理角色,他引用了真實角色出租房屋的功能,并且額外加上了收取中介費的功能。

      代理模式可以分為兩種:

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式