前言
類與類之間主要有六種關係,
分別為 : 依賴、關聯、聚合、組合、繼承、實現 (耦合度依順序增強)
1. 依賴 ( Dependence )
定義 : 對於兩個相對獨立的對象,當一個對象負責構造另一個對象的實例,或者依賴另一個對象的服務時,這兩個對象之間主要體現為依賴關係。
實際生活中我們做任何一件事情幾乎都需要借助其他物體的幫助,換句話說,我們依賴於其他的物體生活。比如 : 小明要開車,小明要吃飯等等,對於面向對象來說,依賴也是最普遍和常見的關係。
人要開車,依賴車
public class Person{
public void drive(Car car){
//
}
}
2. 關聯 ( Association )
定義 : 對於兩個相對獨立的對象,當一個對象實例與另一個對象的一些特定存在固定的對應關係時,這兩個對象之間為關聯關係。又分為單向關聯及雙向關聯。
依賴關係講求的臨時性,偶然性,關聯關係則是一種持久性的關係。
小明吃飯借助筷子,這種關係只存在小明吃飯的情況下,一旦小明不吃飯了,則依賴關係將終止。
與依賴關係不同,關聯對象的雙方地位同級,存在長期,固定的對應關係,即關聯是一種強依賴。
單向關聯 : 你中有我,但我中未必有你。
雙向關聯 : 你中有我,我中有你。
人擁有一台車 (單向關聯)
public class Person{
private Car car;
public void setCar(Car car){
this.car = car;
}
}
夫妻擁有彼此(雙向關聯)
public class Husband{
private Wife wife = new Wife();
public void say(){
System.out.println("my wife name : " + wife.getName() )
}
}
public class Wife{
private Husband husband=new Husband();
public void say(){
System.out.println("my husband name:"+husband.getName());
}
}
3. 聚合 ( Aggregation )
聚合是一種強關聯關係,兩者之間最主要的區別在語意上,聚合之間的關係更像是 整體-個體,有點組裝的含意,而關聯關係的對象是相互獨立,不存在組裝關係。
現實世界中,分子是由原子所組成,需要注意的是組成 A 類型分子的原子也可以組成 B 類型的分子,
換句話說整體和部分兩者的生命週期不是同步的,比如水分子是由氧原子和氫原子所組成,你不能說水分子就沒有氧原子和氫原子吧。
public class Car{
private Tyre tyre=new Tyre();
private Engine engine=new Engine();
public void setTyre(Tyre tyre){
this.tyre=tyre;
}
public void setEngine(Engine engine){
this.engine=engine;
}
}
4. 組合 ( Composition )
組合和聚合非常相似,都表示的整體-部分,但是組合要求整體和部分生命週期是同步的部分不能脫離整體而存在,組合是一種強聚合關係,
比如 : 人這個生命體是由不同器官所構成,人要活著必須依靠心臟,心臟不能脫離人這個生命體,兩者一旦分開就會死亡
public class People{
private Heart heart;
public People(){
heart=new Heart();
}
}