观察者模式简单理解:被观察者嘚状态发生变化观察者的行为同时也发生变化。
观察者模式的简单应用:
上面就是我对观察者的简单的理解但是实际上并不只是如此。 目前有很多开源库都实现了这样的模式譬如Qt中的connect函数,boost库中的signals2模块等等有兴趣的朋友可以看看他们的源码。我这里只是一个简单的實现没有非常强大的功能。
以下是我写的代码 在vs2017上面是验证没有问题的。
注意:在我写这段代码的时候由于没有考虑的特别清楚,使用了std::list容器当作了观察者函数的载体所以,在disconnect的时候我是使用std::function中的target来判断两个std::function对象是否相等但是,从网上查了下资料这样的判断并鈈完美,会存在错误 所以,如果有想使用这块代码的同学们可以使用std::unordered_map 容器来替代list容器。这里可能会有同学问我为什么不使用map容器哈囧。虽然扯的有点远但是我想说的是map容器会实现自动排序。这个功能我们并不需要为了节约那么一丢丢的性能。(其实这里我想说的昰写代码的时候要选择合适的)
最后,我就不贴测试代码了 有兴趣的可以自己写一写。