對象的基本特性之一就是封裝(encapsulation)-對外部世界隱藏其內部細節。封裝往往伴隨delegation(委托)。比如說你問主管是否
有時間參加一個會議,他就把這個消息委托給他的記事薄,然后才能回答你。很好,你沒必要知道這位主管到底使用傳統記事薄或電子記事薄抑或秘書來記錄自己的
約會。
但是人們可能過度運用delegation。你也許會看到某個class接口有一半的函數都委托給其他class,這樣就是過度運用。這時你應該使用Remove Middle Man(160),直接和實責對象打交道。如果這樣[不干實事]的函數只有少數幾個,可以運用Inline Method(117)把它們“inlining”,放進調用端。如果這些Middle Man還有其他行為,你可以運用Replace Delegation with Inheritance(335)把它變成實責對象的subclass,這樣你既可以擴展原對象的行為,又不必負擔那么多的委托動作。
但是人們可能過度運用delegation。你也許會看到某個class接口有一半的函數都委托給其他class,這樣就是過度運用。這時你應該使用Remove Middle Man(160),直接和實責對象打交道。如果這樣[不干實事]的函數只有少數幾個,可以運用Inline Method(117)把它們“inlining”,放進調用端。如果這些Middle Man還有其他行為,你可以運用Replace Delegation with Inheritance(335)把它變成實責對象的subclass,這樣你既可以擴展原對象的行為,又不必負擔那么多的委托動作。