我写了一个简单的观察者模式,其中观察者具有“void notify(std::string)”函数,可观察对象在每个注册的观察者上调用它,并使用标记化字符串来传输数据。这非常简单,容易且有效,但我需要向前迈进。
我需要使用信号和插槽来实现它(例如使用 boost::signals2)。但是我不知道插槽和信号应该是什么样子以及它们应该如何放置。我也不知道如何允许注册我想要的任何函数,而不仅仅是 void (string)。
我找不到任何为这种模式使用信号和插槽的好资源。然而每个人都说信号和槽对于观察者模式来说是惊人的。你能指导我如何将信号和槽用于观察者模式吗?
我目前没有信号的实现如下:
class observable
{
public:
void register(observer *);
void unregister(observer *);
protected:
void notifyObservers()
{
for every registered observer
observer.notify(std::string tokenized_string);
}
}
class observer
{
public:
void notify(std::string) = 0;
}
我需要更改此模式以使用信号和插槽,但我不知道它应该如何有用、设计良好和灵活。