過了一陣子有不同的專案需求,其中7個Mehod需要改寫,為了快速的reuse,很多人會選擇直接繼承原有的Class後再覆寫那7個需求變更的方法。(圖2)再後來,又有一個新的專案需要改寫,但這次是前次變更的7個Method有兩個要與最原始那個一樣,這時一樣是繼承前一個Class再把2個Method從最早的那個複製過來。(圖3)

達到功能需求的變更這是最快的作法沒錯,但是有沒有覺得哪裡怪怪的?PackageImpl與PackageImpl_2裡有兩個方法是完全相同的;PackageImpl裡擁有的20個方法與PackageImpl_1擁有的7個方法沒法立即得知哪些被後面的Class覆寫。Class越多時同樣的狀況到處都有,恐怕連自己都會搞不清楚當初的佈置是怎樣。
雖然OO語言裡Class是允許被繼承的,但是為了避免這種混淆發生,我打算將所有Class都宣告為final,讓特性都繼承自描述用的Abstract Class。
沒有留言:
張貼留言