消息轉(zhuǎn)發(fā) 不僅參照了多繼承,它還讓用輕量級(jí)對(duì)象代替重量級(jí)對(duì)象成為了可能歇终。
通過(guò)代理(Surrogate)可以為對(duì)象篩選消息卤橄。
代理管理發(fā)送到接收者的消息,確定參數(shù)值被復(fù)制乳附,拯救等等都毒。但是它不企圖去做很多其他的,它不重復(fù)對(duì)象的功能只是簡(jiǎn)單地提供對(duì)象一個(gè)可以接收來(lái)自其他應(yīng)用消息的地址碰缔。
舉個(gè)例子账劲,有一個(gè)重量級(jí)對(duì)象,里面加入了許多大型數(shù)據(jù),如圖片視頻等瀑焦,每次使用這個(gè)對(duì)象的時(shí)候都需要讀取磁盤(pán)上的內(nèi)容腌且,需要消耗很多時(shí)間(time-consuming),所以我們更偏向于采用懶加載模式榛瓮。
在這樣的情況下铺董,你可以初始化一個(gè)簡(jiǎn)單的輕量級(jí)對(duì)象來(lái)代理(surrogate)它。利用代理對(duì)象可以做到例如查詢數(shù)據(jù)信息等禀晓,而不用加載一整個(gè)重量級(jí)對(duì)象精续。如果是直接用重量級(jí)對(duì)象的話,它會(huì)一直被持有占用資源粹懒。當(dāng)代理的forwardInvocation:方法第一次接收消息的時(shí)候重付,它會(huì)確保對(duì)象是否存在,如果不存在邊創(chuàng)建一個(gè)凫乖。
當(dāng)這個(gè)代理對(duì)象發(fā)送的消息覆蓋了這個(gè)重量級(jí)對(duì)象的所有功能時(shí)确垫,這個(gè)代理對(duì)象就相當(dāng)于和重量級(jí)對(duì)象一樣。
創(chuàng)建一個(gè)輕量級(jí)的對(duì)象來(lái)代理一個(gè)重量級(jí)對(duì)象帽芽,完成相對(duì)應(yīng)的功能删掀,而不用一直持有著重量級(jí)對(duì)象,從而可以減少資源占用导街。
以后找個(gè)時(shí)間披泪,寫(xiě)一個(gè)Demo