EDITADO : con el comentario de @ Alrid
tl; dr
public abstract class Subscriber<T> implements Observer<T>, Subscription
Entonces, un suscriptor es una implementación del observador , con semántica adicional en la suscripción (se trata más de cancelar la suscripción). El código en su pregunta solo muestra que pasa la Observer
interfaz, en lugar de la implementación (práctica de programación habitual).
Además, este código devuelve un Subscription
, que puede deberse a que el autor de este código pensó que el cliente solo debería tener acceso a Subscription
métodos, sin acceso a elementos producidos por lo observable. Eso puede ser un error del programador.
larga historia
Realmente debería leer el contenido de este sitio web (o reservar): http://www.introtorx.com
Se trata de Rx.Net, pero los conceptos son los mismos, que fueron creados por Erik Meijer y RxJava ejecutores siguieron ellos ( si es aplicable al lenguaje Java).
Esta página te interesará (es el segundo capítulo): KeyTypes
Aquí leerás en los primeros párrafos:
Hay dos tipos clave que debe comprender al trabajar con Rx y un subconjunto de tipos auxiliares que le ayudarán a aprender Rx de manera más eficaz. IObserver e IObservable forman los bloques de construcción fundamentales para Rx, mientras que las implementaciones de ISubject reducen la curva de aprendizaje para los desarrolladores nuevos en Rx.
...
Básicamente, Rx se basa en los cimientos del patrón Observer. .NET ya expone algunas otras formas de implementar el patrón Observer, como delegados o eventos de multidifusión (que suelen ser delegados de multidifusión).
Incluso si los tipos / API son un poco diferentes, aprenderá mucho con este libro, probablemente mucho más que con algunos blogs.
Lo que no dice este libro ( ... porque está en la implementación de RxJava )
El desarrollador principal de RxJava en este momento introdujo una ligera variación (ver PR # 792 ) que permitió distinguir dos tipos de contratos:
- notificación ->
Observer
- (des) suscripción ->
Subscription
Este cambio permitió expresar / dividir mejor estas preocupaciones de las clases de implementación de la biblioteca RxJava.
Sin embargo, como usuario de la biblioteca, el uso de implementaciones reales de la biblioteca RxJava debería ser lo suficientemente bueno.
Implementar un suscriptor requiere mucho más conocimiento, trabajo y cuidado; de hecho, la semántica de la suscripción es muy importante dependiendo del tipo de fuente observable (¿caliente o fría? ¿Caro de crear?)
Exponer en Subscriber
lugar de Observer
en casos como el anterior no interferirá con el código en la mayoría de los casos, pero no es el uso previsto para él a menos que se necesite esa semántica de cancelación de suscripción. Pero al final implementar a Subscriber
, y puede implicar caer en algunos escollos como:
- gastar recursos en funciones que no utilizará
- no puede heredar de otra clase
- escriba un código de cancelación de suscripción incorrecto
- copiar / pegar código un código incorrecto o código correcto escrito para un contexto diferente