權(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í)是年輕人改變自己的最好方式