靜態(tài)代理是指,代理類在程序運(yùn)行前就已經(jīng)定義好.java源文件,其與目標(biāo)類的關(guān)系在程序運(yùn)行前就已經(jīng)確立。在程序運(yùn)行前代理類已經(jīng)編譯為.class文件。
在idea中創(chuàng)建java工程,
工程名稱:ch01-staticproxy
定義業(yè)務(wù)接口UsbSell(目標(biāo)接口),其中含有抽象方法sell(int amount), sell是目標(biāo)方法。
目標(biāo)類UsbKingFactory(金士頓u盤),該類實(shí)現(xiàn)了業(yè)務(wù)接口。
TaoBao就是一個(gè)代理類, 代理廠家銷售u盤
WeiShang就是一個(gè)代理類, 代理廠家銷售u盤
使用代理的訪問(wèn)關(guān)系圖:
⒈代碼復(fù)雜,難于管理
代理類和目標(biāo)類實(shí)現(xiàn)了相同的接口,每個(gè)代理都需要實(shí)現(xiàn)目標(biāo)類的方法,這樣就出現(xiàn)了大量的代碼重復(fù)。如果接口增加一個(gè)方法,除了所有目標(biāo)類需要實(shí)現(xiàn)這個(gè)方法外,所有代理類也需要實(shí)現(xiàn)此方法。增加了代碼維護(hù)的復(fù)雜度。
⒉代理類依賴目標(biāo)類,代理類過(guò)多
代理類只服務(wù)于一種類型的目標(biāo)類,如果要服務(wù)多個(gè)類型。勢(shì)必要為每一種目標(biāo)類都進(jìn)行代理,靜態(tài)代理在程序規(guī)模稍大時(shí)就無(wú)法勝任了,代理類數(shù)量過(guò)多。