java中的組合是在類中實現has-a關係的設計技術。可以在java中使用java繼承或物件組合來重用程式碼。在Java程式設計中表現出來的就是:一個類使用另一個類作為它的成員。
通過使用參照其他物件的範例變數來實現Java組合。例如,一個人(Person
)有一份工作(Job
)。看一下java組合範例程式碼。
Java組合範例
檔案:Job.java
// 工作類
public class Job {
private String role;
private long salary;
private int id;
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public long getSalary() {
return salary;
}
public void setSalary(long salary) {
this.salary = salary;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
檔案:Person.java
public class Person {
// 組成 has-a 關係
private Job job;
public Person(){
this.job=new Job();
job.setSalary(1000L);
}
public long getSalary() {
return job.getSalary();
}
}
下面是一個java組合範例的測試類,它使用Person
物件並獲得工資。
public class TestPerson {
public static void main(String[] args) {
Person person = new Person();
long salary = person.getSalary();
}
}
上述測試程式不受Job
物件中任何更改的影響。如果要程式碼重用,並且兩個類之間的關係是has-a,那麼應該使用組合而不是繼承。
在java中使用組合的好處是可以控制其他物件對用戶端類的可見性,並僅重用需要的東西。
另外,如果其他類實現中有任何更改,例如:getSalary()
方法返回String
,需要更改Person
類以適應它,但用戶端類不需要更改。
組合允許在需要時建立後端類,例如,可以在需要時更改Person
類的getSalary()
方法以在執行時初始化Job
物件。