观察者模式到底是谁持有谁?
在 C++反应式编程书中,开头就有一个范例
1
2
3
4
5
6
7
8
9
int main()
{
int x[] = { 1,2,3,4,5 };
EvenNumberObservable *t = new EvenNumberObservable(x, 5);
IObserver<int>> *xy = new SimpleObserver();
t->Subscribe(*xy);
delete xy; delete t;
return 0;
}
这种响应式编程的观察者模式我觉得很奇怪吗明明t
是observable,是一种数据,xy
是observer,是观察者,那么应该是观察者订阅数据,应该是observer->subscribe(observable)
这样的语义更加自然吧?为什么反过来了?
其实并不奇怪。因为很多情况下响应式编程是“推”式设计(push-based)。把观察者注册进被观察者是一种更方便的行为。也就是当被观察者接收到数据变化,可以把信息“推”到注册进来的观察者里。这样更合理
书籍列表:
https://github.com/apachecn/apachecn-c-cpp-zh/tree/master