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