Như tôi đã hiểu, mẫu quan sát viên cho phép nhiều người quan sát theo dõi một chủ đề duy nhất. Có một mô hình cho kịch bản ngược lại không? Có một mô hình cho một người quan sát duy nhất theo dõi một số đối tượng và phản hồi khi bất kỳ ai trong số họ tăng lên, nói, một sự kiện Thông báo?Ngược lại với mô hình quan sát là gì?
Trả lời
Mẫu Observer vẫn có thể được sử dụng: chỉ cần đăng ký đối tượng giống như một người quan sát với nhiều đối tượng được giám sát. Có thể bạn sẽ muốn sự kiện "Thông báo" nhận được một số loại định danh đối tượng quan sát (con trỏ "this", số id duy nhất v.v.) để đối tượng quan sát có thể chọn một hành động thích hợp với đối tượng báo cáo sự kiện.
Suy nghĩ của tôi chính xác. Điều này vẫn có vẻ giống như một mẫu người quan sát đối với tôi. –
Trừ khi anh ta chỉ muốn trình xử lý sự kiện chạy một lần, bất kể có bao nhiêu nhà xuất bản kích hoạt sự kiện. –
Để thêm vào điều này: http://sourcemaking.com/design_patterns/observer (sử dụng một Trình quan sát duy nhất là "trái với ý của nhà thiết kế") và http://www.eecho.info/Echo/design-pattern/observer-java-pattern/(các biến thể là "Quan sát đơn lẻ so với nhiều người quan sát") – anon
Có. Nó chỉ là một ứng dụng khác của mẫu người quan sát.
Máy quan sát tự thêm vào nhiều đối tượng. Nếu bạn muốn thực hiện cùng một hành động bất kể bạn đang quan sát đối tượng nào thì điều này hoàn toàn giống với mẫu Observer bạn đang sử dụng.
Nếu bạn muốn một hành động riêng biệt tùy thuộc vào Chủ thể nào đã kích hoạt sự kiện thì bạn có thể sử dụng tham số Hành động được chuyển vào phương thức ActionPerformed của Observer để giúp xác định chủ thể nào đã kích hoạt sự kiện. (những tên này có thể thay đổi tùy thuộc vào ngôn ngữ hoặc thư viện bạn chọn)
Cảm ơn, WuHo, dành thời gian để trả lời câu hỏi của tôi. – blueshift
nếu bạn chỉ muốn người quan sát phản ứng một lần, bất kể có bao nhiêu đối tượng được giám sát tăng sự kiện, bạn sẽ phải có một phần của trình xử lý sự kiện " unregister "người quan sát từ tất cả các nguồn khác khi nguồn đầu tiên kích hoạt sự kiện hoặc bạn sẽ phải quyết định mức độ thường xuyên hoặc tiêu chí thời gian nào được sử dụng để quyết định thời điểm sự kiện từ một nguồn khác (hoặc cùng một nguồn sau một khoảng thời gian nhất định) làm cho người quan sát phản ứng lại ...
Tôi có thể muốn sử dụng lời khuyên của bạn ở đây vì tôi muốn đối tượng bị vô hiệu hóa sau khi nó tăng sự kiện Thông báo của nó. – blueshift
Nếu đối tượng quan sát tương tự, thì bạn có thể khiến người quan sát theo dõi tất cả, nếu không, tôi nghĩ bạn nên tách biệt hơn, sau đó bạn sẽ theo dõi quy tắc trách nhiệm duy nhất.
Cũng xem xét mẫu Mediator liên quan.
Mediator mẫu định nghĩa một đối tượng mà gói gọn như thế nào một tập các đối tượng tương tác thông tin (Wikipedia)
More đây: http://sourcemaking.com/design_patterns/mediator
Tôi cũng rất thích @ câu trả lời của CDC về Mediator Vs Observer Object-Oriented Design Patterns:
Mẫu quan sát: Xác định mô hình một-nhiều độ trễ giữa các đối tượng sao cho khi một đối tượng thay đổi trạng thái, tất cả các phụ thuộc của nó sẽ được thông báo và cập nhật tự động.
Mẫu hòa giải: Xác định đối tượng đóng gói cách một tập hợp các đối tượng tương tác. Người hòa giải khuyến khích ghép nối lỏng lẻo bằng cách giữ cho các đối tượng không liên quan đến nhau một cách rõ ràng, và nó cho phép bạn thay đổi tương tác của họ một cách độc lập.
- 1. Ngược lại với "is" là gì?
- 2. Ngược lại với rượu là gì?
- 3. Điều ngược lại với string.next là gì?
- 4. Mô hình ẩn Markov dự đoán quan sát tiếp theo
- 5. Mô hình Markov ẩn cho nhiều biến quan sát
- 6. Select_related() ngược liên quan - mô hình tự động dân số
- 7. Ngược lại với Array # từ chối trong ruby là gì?
- 8. Điều ngược lại với chức năng phát nổ là gì?
- 9. Ngược lại với Math.pow của JavaScript là gì?
- 10. Quan sát viên so với số gọi lại
- 11. Quan sát/Quan sát Android
- 12. Sự khác biệt lớn giữa các nhà quan sát và các cuộc gọi lại là gì?
- 13. MVC :: Mô hình là gì?
- 14. Reactive Quan sát Subscription Xử
- 15. KnockoutJS - Dải quan sát của các đối tượng quan sát
- 16. Mô hình đồng thời Meteor là gì?
- 17. ràng buộc lớp css đến một bất động sản mô hình quan sát
- 18. Máy quan sát và Quan sát Java không hoạt động đúng cách giữa các ứng dụng
- 19. .net Quan sát 'Quan sát' một chủ đề nền
- 20. MySQL: Phiên bản ngược lại của LIKE là gì?
- 21. Django đảo ngược quan hệ với select_related
- 22. Số quan sát trong NSMutableArray
- 23. Knockout.JS Thay đổi mảng quan sát đối với các mục có thể quan sát riêng lẻ
- 24. Lợi thế của mô hình hộp W3C so với mô hình hộp IE5 là gì?
- 25. Ví dụ siêu đơn giản về quan sát C#/quan sát được với các đại biểu
- 26. Quan sát KVO và NSNotificationTrung tâm quan sát
- 27. mẫu quan sát viên vs MVC
- 28. Quan sát các thuộc tính của một mảng đang được quan sát trong KnockoutJS
- 29. Mô hình miền java là gì?
- 30. Quan sát tự trong Cocoa
Đây chỉ là một người quan sát có nhiều quan sát. Vì vậy, tất cả các Observable sẽ cập nhật một Observer đơn khi trạng thái của chúng thay đổi, và Observer vẫn có thể phân biệt các Observable khác nhau khi cập nhật của nó (Observable o, Object arg) được gọi. –
Tôi cảm thấy sự thay đổi duy nhất ở đây là Observer nên tự động đăng ký để quan sát mới khi nó có sẵn trong thời gian chạy.Có nghĩa là khi mới quan sát được đưa lên; sau đó điều này phải được truyền đạt đến Observer để đăng ký nó. Cách khác là khi Observer mới được đưa lên; đối tượng Observer này luôn được xây dựng với Observable trong hàm tạo của chúng. Vì vậy, một cái gì đó như constructor Observable nên chấp nhận rằng Observer duy nhất khi nó được đưa lên. –