我會使用關聯的接口,因爲我不能實例化它們。就像他們在這裏舉例說明的一樣。或者對於靜態類,原因相同。
而我只用於可以實例化的對象的鑽石。像普通班一樣。
這不是他們真正的工作方式。這三種形式(關聯,聚合和組合)定義了關於關係的不同屬性。雖然可以與接口相關,但所有這三者通常在類之間使用。關聯和組合是最簡單的兩個:
- 關聯(無菱形)是最通用的形式,允許在兩端定義基數和導航性。
- 成分(實心菱形)是一個整體關係,其中「整體」(以黑鑽石結尾)'包含'該部分。它規定了兩個關鍵限制:
- 只能有1個容器(即整個底部的基數恰好爲1);
- 它總體上對零件施加了生命週期責任。所以容器負責創建和刪除部件。如果零件的容器被刪除,零件不能繼續存在。
聚合(空心菱形)坐在中間的某個位置。這有點像構圖 - 除非它不強制上述屬性。我不親自使用它。語義太不清楚了,因爲它是值得的。
而且還有第三種方式,用虛線表示的箭頭<>箭頭,但是我沒有使用這種粘合劑。
我認爲你的意思是依賴關係。這是一種較弱的聯合形式。作爲一個例子,取下面的類定義
class Foo {
def bar(Baz: aParam) {
...
}
}
在這種情況下Foo類型具有從其在酒吧()方法的簽名使用上型巴茲的依賴性。然而,它們之間沒有關聯(不能明智地討論例如Foo的實例和Baz的實例之間的關係的基數)。
從實用的角度來看,我會說:
- 可以使用直協會爲+的你很可能要建模
- 成分大概佔了大部分,其餘的關係80%場景
- 在某些情況下,依賴項可能會有用
- 您可以非常高興地使用聚合,而無需使用聚合。
hth。
不客氣。 – sfinnie