我有一个DLL导出一些函数用于获取或设置一些底层数据对象中的各种值。在某些情况下,DLL会通过注册的回调函数指针向应用程序发出通知。然后,应用程序应该通过DLL接口中的特定功能来响应通知(尽管不是很快)。在收到响应之前,DLL中的数据对象可能会被读取但不能写入。有状态的DLL是状态模式的良好候选者吗?
该DLL必须全局导出所有的方法。但是如果通知被提出,所有的设置功能都是禁止的。
关闭我的头顶我可以想到两个解决方案:我可以实现一个简单的基于标志的状态机制,并将每个setter包装在if语句中检查此标志。或者我可以按照国家模式实施这两个国家。
第一个解决方案应该便宜,但要求所有开发人员记得在实现新导出的setter函数时检查该标志。如果在某一时刻只读状态期望基于原始通知的某种类型的响应,则它可能变得难看。 第二种解决方案需要在两种状态下都实现新的导出函数,这提示开发人员考虑函数在只读模式下执行的操作。但大多数方法都会在两种状态下做同样的事情,其余的都不应该做任何事情,甚至抛出异常......
有没有更好的方法来实现类似的东西?
我可能有点不清楚,但我认为你的一些建议与我的想法相似。我不打算在DLL接口中复制函数 - 我希望DLL的有状态对使用DLL的应用程序是透明的。 有趣的想法与函数指针...但是当我切换到只读模式(对不同类型的对象的几个setter)时,可能会有相当多的函数指针改变。我想我可以把它们放在一个静态表中并切换整个表格...... –