我一直在看書試圖瞭解我碰到一個點,我覺得聚集能增強鬆散耦合來聚集和composition.However的各個方面,但也可以打破封裝。聚集打破封裝
增強鬆散耦合。
public class Car{
private Engine engine;
Car(Engine e){
this.engine=e;
}
}
在上述引擎類的任何實現可以創建並在創建時間推至汽車的對象,因爲引擎實例可以沒有車因此它聚集的一個很好的例子。 (這個例子可能不是一個偉大的現實世界的例子,但我認爲我的觀點)
現在客戶端代碼可以完全控制引擎對象,因此它可以改變傳遞給汽車的引擎對象的幾個狀態並且Car的實現會打破封裝,因爲它的對象或狀態(即Engine)不再具有Car中的正確完整性。
我的理解是否正確?
它種取決於與封裝你不想改變一個對象的狀態,而不是你想要操作的對象,所以用引擎代替engine.setOn(boolean)你有engine.turnOn()。如果你只想讓汽車能夠在引擎上運行,然後在這個構造函數可以克隆這個對象以限制訪問權限this.engine =(Engine)e.clone();其他的操作可以是removeEngine然後你可以訪問引擎但是汽車不再有這個引擎 – BevynQ
IMO,I不要認爲客戶端對Engine對象有控制權,我會想象會有更高層的clas稱爲製造商,它將創建正確的引擎對象並將其設置爲特定汽車對象的引擎。 –
我認爲他所指的是創造汽車的過程在發動機不應該有的時候會引用它。 – BevynQ