2007年8月30日 星期四

D19 令人感到麻煩的設計(4)──物件關係的影響

在B21裡提到了物件的三個關聯:is、has、use,其中關係最緊密的是is,其次是has、最鬆散的是use。

左圖的專案物件目前繼承CompClass2,在宣告的同時專案物件就永遠是一個CompClass2而不可能會變成其他種類,動作的時候就只能依CompClass2的規範。右圖的專案物件使用一個變數來記住內含的CompClassInterface,可以依需要操作設定的CompClassInterface實作(注意:三種CompClass都可以設定),這就增加了專案物件使用的彈性(Strategy Design Pattern)。

右圖的專案物件本身可以使用前一篇的方法繼承另一個Class,加上混用Wrapper Design Pattern讓專案物件同時實作CompClassInterface,並將實作方法全部直接呼叫strategy設定的CompClass的話,我們就可以擁有身具兩種CompClass的專案元件應用在更多的地方。(必要時還可以增加其他的strategy來擴充功能)

use是在呼叫時傳入物件,物件只在方法中使用而不另外記憶下來;在服務性質的API可以大量使用這種方式。呼叫Web Service時使用的就是這種物件關係。

沒有留言:

張貼留言