就於對於對象方法的增強總結,對象方法增強總結
最近在學習的是過濾器,在處理網頁的中文亂碼問題的時候,用到的是在doFilter中用的是一個封裝類,進行對getParamter ()方法的重寫,然後就想著進行可以增強對象方法的方式進行一個總結,好吧,廢話不多說
第一種是繼承
子類繼承父類,直接對方法進行重寫, 這種應該都懂
第二種 ,動態代理
動態代理,主要是通過Proxy 與InvocationHandler 兩個介面進行處理,並同時利用了反射
在建立代理對象的時候,可以有兩種方式,一種是通過Proxy的靜態方法 getProxyClass(參數1,參數2)是產生一個代理類,但是其實在後期執行個體化對象的時候,還是需要一個InvocationHandler的執行個體對象,因為他是一個調用處理常式的介面,裡面的invoke的方法,裡面可以實現方法的增強
在者可以直接建立一個代理執行個體對象,用Proxy的靜態方法getProxyInstance(參數1,參數2,參數3);
參數一,是要被代理的類載入器,
參數二, 要實現的所有的介面的數組Class[]
參數三 ,就是一個InvocationHandler的執行個體化對象 該對象也有三個參數,依次是:代理對象,方法,參數數組Object[]
擴充:面向切面編程AOP中的AOP代理,後期在介紹
第三種 裝飾者模式
1.就是增強類與被增強類要實現同一個介面
2.被增強類作為參數放在增強類中作為參數,然後在增強類中定義一個成員變數,把參數即被增強類的執行個體化對象通過構造方法傳給增強類,此時,該類就具備了被增強類的所有的方法及屬性,
3, 然後在類中,可以選擇是否對被增強類的方法進行重寫
總結:
為什麼
使用對方法的增強,可以降低代碼之間的耦合性,在後期的代碼處理的時候,可以不用動之前定義好的代碼,可以更好的對資料的維護,
繼承與裝飾者模式的區別,
繼承 是直接成為他的子類,繼承體系可能會造成臃腫,擴充性不好,類與類之間的耦合性增高,繼承只能單繼承,
裝飾者模式 是直接把該類的執行個體化對象作為參數傳入 ,在後期的維護中,因為耦合性的不高,可以不修改原始碼。直接進行修改和增強,會非常方便,可以傳入多個實作類別對象
最後: 哈哈哈哈,哪裡有錯的記得提醒下小仙,修仙路漫漫,來日方長,我要去跑步了。。。
後續.........
---恢複內容結束---