2008年3月9日 星期日

M03 令人感到麻煩的設計(11)──用Abstract Class作對應

接著上一篇提出的問題,從圖1的基本型態開始要加入另一個有7個方法不同的Class,不過這次採用並聯的佈置,讓它直接實作Interface,這會形成圖2的佈置。兩個Class有13個完全相同的方法,可是完全沒有地方可以放置相同的程式碼,這使得設計時“抽取相同部分”的動作無貫徹。

很明顯地在這個例子裡放置Abstract Class會是個好解法。(圖3)這種方式讓我們能夠把相同的13個方法放置到Abstract Class,再個別在Class裡分開實作那7個不同的方法;基於覆寫後可能的失控,能夠設計為沒有覆寫方式的話我都會採用該種作法。


常聽到Class是特性的定義、Object是Class實體的說法,不過在我自己的設計裡會調適為:Abstract Class是特性的定義、Object是Class的實體、Class只是為建立Object的需要而存在。儘量把共用的動作方法建立在Abstract Class裡,Class裡要放的只有該Class特殊化的方法,這時再看前一篇就能夠現在發現完全沒有繼承Class的必要,因為所有需要的動作全都在Abstract Class中!

這裡都是我自己所用的設計,會這麼做是因為能夠避免我所遇過的一些問題,但還是可以保有設計的功能性。

沒有留言:

張貼留言