【发布时间】:2017-03-22 01:07:38
【问题描述】:
我一直在尝试创建一个基本的观察者模式,它使用泛型类型在可观察对象和它的订阅者之间创建紧密耦合的关系。以 YouTube 为例;频道是可观察对象,订阅者是 YouTube 用户。 YouTube 频道只能由 YouTube 用户订阅,YouTube 用户只能订阅频道。因此,例如,您不能使用 YouTube 帐户订阅报纸或每月俱乐部的果冻。
我的第一个想法就是做这样的事情:
abstract class Observable<T> where T : Subscriber
abstract class Subscriber<T> where T : Observable
但这不起作用,因为在这两种情况下,T 都需要扩展一个包含特定泛型类型的类,从而使泛型类型无用。
我的第二个想法是做这样的事情:
abstract class Observable<T> : IObservable where T : ISubscriber
abstract class Subscriber<T> : ISubscriber where T : IObservable
这可行,但并不完全安全。例如,IObservable 有一个方法Subscribe(ISubscriber subscriber),Observable 有一个方法Subscribe(T t) 接口方法Subscribe 的实现只是将给定的ISubscriber 转换为类型T 并将其传递给另一个同名方法.
由于接口方法必须是公共的,从技术上讲,您可以尝试订阅不是 T 类型的对象,只要它是 ISubscriber。有没有办法在没有松散线程或有问题的代码的情况下完成这种观察者模式?
【问题讨论】:
标签: java c# generics observer-pattern