我一直在尝试创建一个基本的观察者模式,它使用泛型类型在可观察对象和它的订阅者之间创建一个紧密耦合的关系。例如,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),可观察的方法有Subscribe(T t)接口方法Subscribe的实现只是将给定的ISubscriber转换为T类型,并将其传递给同名的其他方法。
由于接口方法必须是公共的,所以在技术上您可以尝试订阅一个不是T类型的对象,只要它是ISubscriber。有没有一种方法可以在没有松散线程或有问题的代码的情况下完成这种观察者模式?
发布于 2017-03-22 01:21:53
发布于 2017-03-22 01:14:39
在添加观察者时检查实例类型
// in you observer class
public void subscribe(ISubscriber s) {
if( s instanceof YouTubeSubscriber) {
System.out.println("Subscriber added");
} else {
// ignore the subscriber
System.out.println("Subscriber rejected");
}
}https://stackoverflow.com/questions/42940974
复制相似问题