30/09/2018, 18:52

[Design pattern]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ó?

Quân viết 20:58 ngày 30/09/2018
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.

Cương Nguyễn viết 20:58 ngày 30/09/2018

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

Chi Ngo viết 21:08 ngày 30/09/2018

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.

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.

Nguyen Ca viết 21:01 ngày 30/09/2018

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

Bài liên quan
0