Tôi đang cố gắng thiết kế một khung công tác không đồng bộ và muốn biết mọi người nghĩ gì về ưu điểm/nhược điểm của mẫu gọi lại so với mẫu quan sát viên.Gọi lại/Command vs EventListener/Observer Pattern
Callback pattern:
//example callback
public interface Callback{
public void notify(MethodResult result);
}
//example method
public class Worker{
public void doAsyncWork(Callback callback){
//do work
callback.notify(result);
}
}
//example observer pattern
public interface EventListener{
public void notify(MethodResult result);
}
public class Worker{
private EventListener listener;
public registerEventListener(EventListener listener){
this.listener=listener;
}
public void doAsyncWork(){
//do work
listener.notify(result);
}
}
Tôi đang làm việc với một khuôn khổ có vẻ như sử dụng cả hai mẫu này. Mẫu EventListener không phải là mẫu điển hình vì nó không có danh sách người nghe. Điều này có thể dễ dàng được triển khai mặc dù bằng cách tạo một CompositeListener có ngữ nghĩa riêng về mức độ ưu tiên của người nghe và cách xử lý sự phân bố các sự kiện cho mỗi người nghe, ví dụ: sinh ra một chuỗi mới cho mỗi người nghe và thông báo nối tiếp. (Tôi thực sự nghĩ rằng đây là một ý tưởng tốt vì nó là một sự tách biệt tốt các mối quan tâm và là một sự cải tiến trên mẫu quan sát/người nghe chuẩn).
Bất kỳ suy nghĩ nào về thời điểm bạn nên sử dụng?
Thxs.
Để đơn giản hóa việc gọi lại tôi khuyên bạn nên sử dụng chức năng hạng nhất. vì vậy nó chỉ 'public void doAsyncWork (Chức năng gọi lại) ' – Raynos
Tôi mới cho cả các mẫu thiết kế, và tôi đã rất bối rối với mẫu mã của bạn. Bạn có chắc đây là bản demo chính xác của hai mẫu này, đặc biệt là mẫu Observer? Với tôi, cách bạn viết chúng không có gì khác biệt. Đừng hiểu lầm tôi. Tôi chân thành đánh giá cao câu hỏi của bạn vì tôi có cùng một điều trong tâm trí. Chỉ muốn thẳng ra. Cảm ơn! – jiu9x9uij