Composition trong Java là kỹ thuật thiết kế để thực thi các mối quan hệ has-a trong các class. Chúng ta có thể sử dụng Java Inheritance hoặc hoặc Object composition trong Java để sử dụng lại code.
Java composition được thực hiện bằng cách sử dụng các biến instance mà tham chiếu đến các object khác. Ví dụ một Person
có một Job
. Hãy cùng xem ví dụ code về Java Composition sau đây
package com.example.composition; 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; } }
package com.example.composition; public class Person { //composition has-a relationship private Job job; public Person(){ this.job=new Job(); job.setSalary(1000L); } public long getSalary() { return job.getSalary(); } }
Sau đây chúng ta sẽ thử test sử dụng class Person
và lấy lương
package com.example.composition; public class TestPerson { public static void main(String[] args) { Person person = new Person(); long salary = person.getSalary(); } }
Ưu điểm
Chú ý tằng TestPerson
ở trên cho Composition không bị ảnh hưởng bởi bất cứ thay đổi nào trong Job
object. Nếu bạn đang tìm cách để tái sử dụng lại code và mối quan hệ giữa các class has-a thì bạn nên sử dụng Composition hơn là sử dụng Inheritance
Lợi ích của Composition trong Java là chúng ta có thể kiểm soát minh bạch Object khác cho các class client và chỉ sử dụng lại những gì chúng ta cần.
Ngoài ra nếu có bất kỳ thay đổi nào trong class thực thi ví dụ như là getSalary()
trả về String, chúng ta cần thay đổi class Person
cho phù hợp với nó nhưng các class của client không cần thay đổi.
Compisition cho phép tạo class Back-end khi cần ví dụ chúng ta có thể thay đổi phương thức getSalary()
của class Person
để khởi tạo object Job
tại thời điểm chạy khi có yêu cầu