2011-12-01 30 views
5

Tôi cần thực hiện một số tác vụ trên object1 khi một số thay đổi trạng thái xảy ra trên object2. Tôi đã cố gắng sử dụng mẫu quan sát được trong android, ý tôi là sử dụng các lớp Observer và Observable, do đó, object1 triển khai Observer và object2 mở rộng Có thể quan sát được. Thật không may, object2 đã kéo dài từ một lớp khác, vì vậy tôi không thể xác định nó là một phần mở rộng của Observable.Thay thế cho Mẫu có thể quan sát?

Có cách nào khác để sử dụng mẫu này không? Có lẽ các lớp khác cho phép tôi thực hiện hành vi này?

Cảm ơn.

Trả lời

8

Đơn giản chỉ cần thêm vào object2 một lĩnh vực loại Observable mà quan sát được thêm vào và trên đó notifyObservers() được gọi khi có gì đó thay đổi.

Đây là ý nghĩa của "thành phần ưu tiên hơn thừa kế".

+0

cảm ơn! đó là đủ cho tôi. giải pháp của kostja cũng có vẻ tốt nhưng nó đòi hỏi thêm nỗ lực. – forumercio

+0

Đây là giải pháp "nguy hiểm". Mặc dù nó cũng có tác dụng với tôi. Nhưng ngoài ra bạn nên có đề cập, để kết thúc lớp học của bạn hoặc ít nhất là khai báo tất cả các tài sản có liên quan như tư nhân. Đây là cách duy nhất để giữ cho công việc của bạn có thể quan sát được, khi lớp học của bạn được mở rộng bởi một lớp khác ... – Sauer

6

Mở rộng lớp có thể quan sát được tích hợp là một lựa chọn khá tồi để triển khai mẫu quan sát vì nó phá vỡ cấu trúc phân cấp lớp của bạn, nhưng bạn đã biết điều đó rồi.

Cách tốt hơn là định nghĩa giao diện Observable của riêng bạn và để cho lớp của bạn triển khai giao diện đó. Bạn cũng sẽ cần một giao diện Listener cho các lớp nghe

Các phương pháp bạn sẽ cần trong giao diện Observable bạn đang addListener(Listener listener)removeListener(Listener listener)

Các vấn đề liên quan