composition

Composition - tạm dịch là tổng hợp - là một kỹ thuật design. 

Để thực hiện kỹ thuật Composition, ta cần sử dụng các object ở một class khác làm thuộc tính cho object được tạo bởi class tổng hợp. 

Composition được sinh ra nhằm đạt được mục đích là implement mối quan hệ có-một (has-a) giữa các class. Quan hệ has-a của 2 class tức là trong quá trình xây dựng class, class này có tham chiếu đến class khác (xem như là thành viên của nó).

 

Khóa học Java căn bản - có sản phẩm, có việc làm - Giảng viên: S.A Nhữ Đình Thuận

composition relationship
Một ví dụ trong thực tế liên quan tới Composition

 

Ta áp dụng Composition khi cần sử dụng những chức năng của một class nhưng lại không muốn tác động lên phần code của class đó.

Composition relationship 2

Hãy xét ví dụ về 2 class: Person Job. Person đại diện cho người, Job đại diện công việc. Mỗi người sẽ có một công việc, và trong class test, chúng ta sẽ xuất ra tiền lương của người đó.

Đầu tiên là class Job.

package com.techmaster.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;
    }
    
    
}

Tiếp đó là Person.

package com.techmaster.composition;

public class Person {

    //COMPOSITION cho mối quan hệ người có-một việc ( has - a)
    private Job job;
   
    public Person(){
        this.job=new Job();
        job.setSalary(1000L);
    }
    public long getSalary() {
        return job.getSalary();
    }

}

Hãy kiểm tra những gì chúng ta vừa viết trong một class Test:

package com.techmaster.composition;

public class TestPerson {

    public static void main(String[] args) {
        Person person = new Person();
        long salary = person.getSalary();
    }

}

 

Tham khảo bài viết gốc tại JournalDev

 

Bài viết có sử dụng thêm một số minh họa của Anphanhv