Thảo luận về Composite pattern

Theo mọi người thì trong pattern Composite sẽ có thể có những issue gì? Đưa ra các vấn đề và cùng nhau giải quyết.

Ví dụ về Singleton pattern:

Triển khai của một Singleton có dạng:

public class Singleton {
    private static Singleton singleton; // Khong khoi tao truc tiep vi class duoc trien khai co the rat nang

    private Singleton() {
    }

    public Singloton getInstance() {
        if(singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}

Từ triển khai trên nhận thấy singleton bắt buộc phải là một thuộc tính static nên sẽ có thể gặp phải vấn đề về bất đồng bộ. Khi có hai thread cùng gọi đến phương thức getInstance dẫn đến cả hai cùng check thuộc tính singleton đều bằng null. Việc này dẫn đến singleton được khỏi tao hai lần gây mất tính toàn vẹn của dữ liệu.

Vậy với Composite chúng ta sẽ có nhưng issue gì kéo theo nó?

1 Like
public class Singleton {
    private static Singleton singleton; // Khong khoi tao truc tiep vi class duoc trien khai co the rat nang
    private final Object lock = new Object();
    private Singleton() {
    }

    public Singloton getInstance() {
        if (singleton == null) {
            syschonized(lock){
                 if (singleton == null){
                    singleton = new Singleton();
                 }
            }
        }
        return singleton;
    }
}

cái này sẽ hạn chế đc vấn đề của singleton

Tại sao không syschonized(singleton) mà lại syschonized(lock)… Với cả là Singleton chỉ là ví dụ thôi. Mình đang muốn gợi mở về Composite.

Bác có thể khái quát Composite pattern là gì được không :slight_smile: . Nhiều người không biết đâu

Mình đã đọc 1 bài phân tích chi tiết các case khi sử dụng Singleton. Mình sẽ tìm lại link đó cho bạn, trong bài viết của họ có tính đến nhiều trường hợp. Nói chúng các pattern là kinh nghiệp của những lập trình viên có kinh nghiệm rồi nên theo mình thì hiếm mà có các issue lắm.

1 Like

Pattern được sinh ra là để giải quyết các common issue nên mục tiêu ở đây là tìm hiểu về các issue để hiểu sâu thêm về các pattern ấy.

3 Likes

thêm cái hình để dễ hình dung về composite

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?