一揍很、需求:在程序執(zhí)行期間追蹤正在發(fā)生的活動
(1)接口
(2)實現(xiàn)該接口的方法
(3)調(diào)用該方法,執(zhí)行結(jié)果
二万伤、問題
代碼混亂:越來越多的非業(yè)務(wù)需求(日志和驗證等)加入后, 原有的業(yè)務(wù)方法急劇膨脹. 每個方法在處理核心邏輯的同時還必須兼顧其他多個關(guān)注點.
代碼分散: 以日志需求為例, 只是為了滿足這個單一需求, 就不得不在多個模塊(方法)里多次重復相同的日志代碼. 如果日志需求發(fā)生變化, 必須修改所有模塊.
三窒悔、使用動態(tài)代理解決上述問題
代理設(shè)計模式的原理: 使用一個代理將對象包裝起來, 然后用該代理對象取代原始對象. 任何對原始對象的調(diào)用都要通過代理. 代理對象決定是否以及何時將方法調(diào)用轉(zhuǎn)到原始對象上.