Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Khác biệt giữa tight coupling và loose coupling trong Java?


Tight coupling có nghĩa là các class và object phụ thuộc lẫn nhau. Nói chung, tight coupling thường không tốt vì nó làm giảm tính linh hoạt và khả năng tái sử dụng code trong khi Loose coupling có nghĩa là giảm thiểu sự phụ thuộc của một class sử dụng class khác trực tiếp.

Tight Coupling

  • Đối tượng tightly coupled là đối tượng cần biết về các đối tượng khác và thường phụ thuộc cao vào interface của nhau.
  • Thay đổi một đối tượng trong ứng dụng tightly coupled thường yêu cầu thay đổi nhiều đối tượng khác.
  • Trong ứng dụng nhỏ, chúng ta dễ dàng xác định thay đổi và ít cơ hội bỏ lỡ. Nhưng trong ứng dụng lớn, các sự phụ thuộc lẫn nhau này không phải lúc nào cũng được biết bởi mọi lập trình viên và có cơ hội bỏ qua các thay đổi.

Ví dụ

class A { 
    public int a = 0; 
    public int getA() { 
        System.out.println("getA() method"); 
        return a; 
    } 
    public void setA(int aa) { 
        if(!(aa > 10)) 
            a = aa; 
    } 
} 
public class B { 
    public static void main(String[] args) { 
        A aObject = new A(); 
        aObject.a = 100; // Not suppose to happen as defined by class A, this causes tight coupling. 
        System.out.println("aObject.a value is: " + aObject.a); 
    } 
}

Trong ví dụ trên, code được định nghĩa bằng loại triển khai này sử dụng tight coupling và rất xấu vì class B biết chi tiết của class A, nếu class A thay đổi biến 'a' thành private thì class B bị phá vỡ, cũng class A quy định biến 'a' không nên lớn hơn 10 nhưng như ta thấy không có cách nào ép buộc quy tắc đó vì chúng ta có thể truy cập trực tiếp biến và thay đổi trạng thái của nó thành bất kỳ giá trị nào ta quyết định.

Kết quả

aObject.a value is: 100

Loose Coupling

  • Loose coupling là mục tiêu thiết kế để giảm sự phụ thuộc lẫn nhau giữa các thành phần của một hệ thống nhằm giảm rủi ro thay đổi trong một thành phần sẽ yêu cầu thay đổi trong bất kỳ thành phần nào khác.
  • Loose coupling là khái niệm chung hơn nhằm tăng tính linh hoạt của hệ thống, làm cho nó dễ bảo trì hơn và làm cho toàn bộ framework ổn định hơn.

Ví dụ

class A { 
    private int a = 0; 
    public int getA() { 
        System.out.println("getA() method"); 
        return a; 
    } 
    public void setA(int aa) { 
        if(!(aa > 10)) 
            a = aa; 
    } 
} 
public class B { 
    public static void main(String[] args) { 
        A aObject = new A(); 
        aObject.setA(100); // No way to set 'a' to such value as this method call will 
            // fail due to its enforced rule. 
        System.out.println("aObject value is: " + aObject.getA()); 
    } 
}

Trong ví dụ trên, code được định nghĩa bằng loại triển khai này sử dụng loose coupling và được khuyến khích vì class B phải đi qua class A để lấy trạng thái của nó nơi các quy tắc được thi hành. Nếu class A thay đổi nội bộ, class B sẽ không bị phá vỡ vì nó chỉ dùng class A như một cách giao tiếp.

Kết quả

getA() method aObject value is: 0