Observer pattern với dùng interface làm callback thì khác gì nhau?

Tình hình mình đang tìm hiểu thằng observer thì thấy nó khá giống với callback, khác mỗi cái observer nó bắn được nhiều thằng, callback chỉ dc 1 thì phải, ai khai sáng e với ạ, thanks mn

Callback chỉ được 1 á? SAI!
Thích làm nhiều vẫn được, nhưng hầu hết các sự kiện trong Java toàn setListener() chứ không phải addListener(), tùy biến thì nó thêm nhiều được thôi.


Observer (Kẻ quan sát): chuyên theo dõi dữ liệu (trường - biến) của đối tượng khác, khi có thay đổi thì “báo cáo”. Chủ động theo dõi.
Callback Interface (Giao tiếp gọi lại): dành cho chính đối tượng nào gọi khi nó muốn. Chủ động gọi.

3 Likes

callback thì mình hiểu r, còn thằng observer vẫn chưa hiểu lắm, mình thấy nó khá giống vs callback mà nhỉ

Bạn đọc thêm các bài về rxjava để hiểu thêm các khái niệm trong reactive programming

1 Like

Câu hỏi rất hay, mình xin phép bổ sung ý kiến:

Hai Pattern hơi tương tự, vì cả hai đều gọi đến một hay nhiều Object một cách asynchronously, nhưng mà theo mình thì hai Pattern này được áp dụng trong tình hình khác nhau.

Callback: Thằng Caller gọi một asynchronous Operation và muốn được thông báo chừng nào Operation hoàn thành.
Ví dụ: Mình bắt đầu dowload một file bự, và nói với Method Download rằng: “Chừng nào mày xong mày thông báo tao thông qua Method này nhé!”

Observer: Ở trong lifecycle của thằng Observable có những sự kiện thú vị, và thằng observable sẽ thông báo những sự kiện đó cho bất kỳ ai quan tâm (những thằng Observer).
Ví dụ: Trong Webshop của mình có Object “ShoppingCart”, mỗi lần khách hàng add item vào thì ShoppingCart sẽ thông báo với danh sách “cartItemAddedObservers”. Mỗi lần khách hàng xóa item thì shoppingCart sẽ thông báo với danh sách “cartItemRemovedObservers”.

6 Likes

theo mình tìm hiểu thì callback nó chính là observer, có phải vậy ko b nhỉ

Không! Khác nhau đấy. Như mình giải thích:

Observer là design pattern.
Callback là interface chỉ có 1 method.

2 khái niệm thuộc 2 phạm trù khác nhau thì so sánh thế nào được. :v

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