ĐÃ CHỈNH SỬA : với nhận xét của @ Alrid
tl; dr
public abstract class Subscriber<T> implements Observer<T>, Subscription
Vì vậy, Người đăng ký là một triển khai của Người quan sát , với ngữ nghĩa bổ sung về đăng ký (nó thiên về hủy đăng ký). Đoạn mã trong câu hỏi của bạn chỉ cho thấy rằng nó vượt qua Observer
giao diện, thay vì thực hiện (thực hành lập trình thông thường).
Ngoài ra, mã này trả về a Subscription
, đó có thể là do tác giả của mã này nghĩ rằng máy khách chỉ nên có quyền truy cập vào Subscription
các phương thức, không có quyền truy cập vào các phần tử được tạo ra bởi trình quan sát. Đó có thể là lỗi của lập trình viên.
câu chuyện dài
Thực sự bạn nên đọc nội dung của trang web này (hoặc sách): http://www.introtorx.com
Đó là về Rx.Net, nhưng các khái niệm rất giống nhau, chúng được tạo ra bởi Erik Meijer và những người thực hiện RxJava đã làm theo chúng ( nếu áp dụng cho ngôn ngữ Java).
Trang này sẽ khiến bạn quan tâm (nó là chương thứ hai): KeyTypes
Ở đây, bạn sẽ đọc những đoạn đầu tiên:
Có hai loại chính cần hiểu khi làm việc với Rx và một tập hợp con các loại bổ trợ sẽ giúp bạn học Rx hiệu quả hơn. IObserver và IObservable tạo thành các khối xây dựng cơ bản cho Rx, trong khi việc triển khai ISubject giảm bớt đường cong học tập cho các nhà phát triển mới làm quen với Rx.
...
Về cơ bản Rx được xây dựng dựa trên nền tảng của mẫu Observer. .NET đã tiết lộ một số cách khác để triển khai mẫu Observer chẳng hạn như đại biểu hoặc sự kiện đa hướng (thường là đại biểu đa hướng).
Ngay cả khi các loại / API khác nhau một chút, bạn sẽ học được rất nhiều điều với cuốn sách này, có thể là nhiều hơn so với một số blog.
Điều này có cuốn sách không nói ( ... bởi vì nó là trong việc thực hiện RxJava )
Nhà phát triển chính RxJava tại thời điểm này đã giới thiệu một biến thể nhỏ (xem PR # 792 ) cho phép phân biệt hai loại hợp đồng:
- thông báo ->
Observer
- (bỏ) đăng ký ->
Subscription
Thay đổi này cho phép thể hiện / phân tách tốt hơn những mối quan tâm này của các lớp triển khai của thư viện RxJava.
Tuy nhiên, với tư cách là người dùng thư viện, việc sử dụng các triển khai thực tế của thư viện RxJava phải đủ tốt.
Việc triển khai một thuê bao đòi hỏi nhiều kiến thức, công việc và sự cẩn thận hơn, thực sự ngữ nghĩa của đăng ký rất quan trọng tùy thuộc vào loại nguồn có thể quan sát được (Nóng hay lạnh? Tạo đắt tiền?)
Việc để lộ Subscriber
chứ không phải Observer
trong những trường hợp như trên sẽ không ảnh hưởng đến mã trong hầu hết các trường hợp, nhưng nó không phải là mục đích sử dụng cho nó trừ khi những ngữ nghĩa hủy đăng ký đó là cần thiết. Nhưng cuối cùng việc thực hiện a Subscriber
, và có thể liên quan đến việc rơi vào một số cạm bẫy như:
- dành tài nguyên cho chức năng bạn sẽ không sử dụng
- không thể kế thừa từ lớp khác
- viết sai mã hủy đăng ký
- sao chép / dán mã một mã không chính xác hoặc mã đúng được viết cho một ngữ cảnh khác