仅向已更改的信号发送通知
Sending notification to only changed signal
我有一个 API 来订阅一个 CAN 信号,如下所示:
bool subscribe(信号名称);
订阅响应(常量CAN_DATA&数据);
data.signal是信号名称
data.value为信号值。
现在假设客户端 C1 和客户端 C2 分别订阅了不同的信号 s1 和 s2。
如果收到任何信号 s1 或 s2 改变响应
订阅响应(常量CAN_DATA&数据);
客户端 c1 和 c2 将被添加为观察者,如下所示
AddObserver(CanClient* observer) {
observerlist.push_back(observer);
}
所有添加的观察者都会收到如下信号值变化的通知:
void SubscribeResponse(const CAN_DATA& data){
std::vector<CanClient*>::iterator iter = observer_list_.begin();
for (; iter != observerlist.end(); ++iter)
(*iter)->NotifyEvent(data.signal,data.Value);
}
如何只向实际订阅者发送通知,即如果 s1 更改通知其订阅者 c1 而不是 c2?
观察者模式背后的想法是允许松散耦合,这样observed(subject)就不必知道任何信息关于观察者。相反,您可以通知所有观察者,然后让观察者根据信息选择是否对收到的通知做出反应。
在 NotifyEvent
方法中,您可以对 CAN_DATA
信息做出反应,并且仅当它是所需的 signal
时才进行处理。
还有其他方法可以实现这一点,一种可能的方法是访客模式,在 运行 时间选择信号 "type"。
我有一个 API 来订阅一个 CAN 信号,如下所示:
bool subscribe(信号名称);
订阅响应(常量CAN_DATA&数据);
data.signal是信号名称
data.value为信号值。
现在假设客户端 C1 和客户端 C2 分别订阅了不同的信号 s1 和 s2。
如果收到任何信号 s1 或 s2 改变响应 订阅响应(常量CAN_DATA&数据);
客户端 c1 和 c2 将被添加为观察者,如下所示
AddObserver(CanClient* observer) {
observerlist.push_back(observer);
}
所有添加的观察者都会收到如下信号值变化的通知:
void SubscribeResponse(const CAN_DATA& data){
std::vector<CanClient*>::iterator iter = observer_list_.begin();
for (; iter != observerlist.end(); ++iter)
(*iter)->NotifyEvent(data.signal,data.Value);
}
如何只向实际订阅者发送通知,即如果 s1 更改通知其订阅者 c1 而不是 c2?
观察者模式背后的想法是允许松散耦合,这样observed(subject)就不必知道任何信息关于观察者。相反,您可以通知所有观察者,然后让观察者根据信息选择是否对收到的通知做出反应。
在 NotifyEvent
方法中,您可以对 CAN_DATA
信息做出反应,并且仅当它是所需的 signal
时才进行处理。
还有其他方法可以实现这一点,一种可能的方法是访客模式,在 运行 时间选择信号 "type"。