所以…我有一个地图关联线程和队列,当线程和队列被构造和销毁时,它们被更新.此映射本身使用互斥体来保护对其的多线程访问.@H_404_3@
过去因为“只有一个在这个应用程序”,我一直犯过单身人士的罪,相信我 – 付出了我的忏悔!@H_404_3@
我的一部分不禁想到在应用程序中确实只有一个队列/线程映射.另一个声音说,单身不好,你应该避免他们.@H_404_3@
我喜欢删除单身人士的想法,并能够将其存根进行单元测试.麻烦的是,我很难想到一个很好的替代解决方案.@H_404_3@
过去工作的“通常”解决方案是传递一个指向对象的指针,而不是引用单例.我认为在这种情况下这将是棘手的,因为观察者和主题在我的应用程序中是10美分,并且将队列/线程映射对象传递到每个观察者的构造函数中将非常尴尬.@H_404_3@
我很欣赏的是,在我的应用程序中,我可能只有一张地图,但是不应该放在主题和观察者类代码的排列位置.@H_404_3@
也许这是一个有效的单身人士,但我也会感谢任何关于我如何删除它的想法.@H_404_3@
谢谢.@H_404_3@
PS.我在接受的答复中提到了What’s Alternative to Singleton和this article.我不禁想到ApplicationFactory只是另一个名字的另一个单身人士.我真的看不到优势.@H_404_3@解决方法 如果试图摆脱单身化的唯一目的是从单元测试的角度来看,也许用可以插入存根的东西替换单体吸气剂.
class QueueThreadMapBase{ //virtual functions};class QeueueThreadMap : public QueueThreadMapBase{ //your real implementation};class QeueueThreadMapTestStub : public QueueThreadMapBase{ //your test implementation};static QueueThreadMapBase* pGlobalinstance = new QeueueThreadMap;QueueThreadMapBase* getInstance(){ return pGlobalinstance;}voID setInstance(QueueThreadMapBase* pNew){ pGlobalinstance = pNew}
然后在你的测试中只是换出队列/线程图实现.至少这个单身人士再多一点.@H_404_3@ 总结
以上是内存溢出为你收集整理的c – 帮我删除一个单身人士:寻找一个替代方案全部内容,希望文章能够帮你解决c – 帮我删除一个单身人士:寻找一个替代方案所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)