2012-05-05 44 views
0

我從委託模式中掌握的是那個類(ClassA),它做了另一個類(ClassB)的工作。 ClassA還必須做更多的事情(有更多的方法)比ClassB做的更多。您可能會想要擁有ClassA子類ClassB。抵制這種誘惑,因爲這是一件錯誤的事情。繼承本身就很慢,正確的設計包括在ClassA中定義ClassB類型的數據成員。這樣一來,你已經消除了子類的需求,並降低了耦合強度關於java中的委託模式

//ClassA 
public class ClassA{ 

     private ClassB classB; 

     //methods 
     public void doThis(){classB.doThis();} 
     public void doThat(){…} 
    } 

,這裏是B類

ClassB 
    public class ClassB{ 
     public void doThis(){…} 
    } 

請告知我的理解是正確的。

+1

這聽起來大致正確,雖然我在這裏沒有看到真正的問題。 –

+0

選擇繼承委派的原因有​​很多,但我不會說性能就是其中之一。 –

+0

@JBNizet,謝謝你能告訴我爲什麼沒有選擇繼承讓班級更有凝聚力的原因。 – dghtr

回答

1

你真的在問:inheritance and composition有什麼區別。這兩種模式都有自己的用例。 Effective Java建議您應該在兩個對象具有真實'是'關係時使用繼承。所以例如矩形是一個形狀。所以它應該可能延長形狀。但是,有些情況下,人們誤解了這個理論,並且在他們真的應該編寫另一個對象時仍然延伸。未來的優勢當然是脫鉤和更好的設計。教科書示例在java中擴展了HashMap。可以實現Map而不是擴展,只需要一個合成的HashMap即可完成實際的邏輯。

我建議您閱讀Effective Java並瞭解兩種模式的優點。