VB6是否可以实现Singleton设计模式?

时间:2011-08-31 13:50:51

标签: vb6 singleton

在VB6中是否可以实现Singleton设计模式?

目前我工作的遗留系统有很多IO由特定类的多个实例执行。希望清理所有这些实例并使IO仅由一个实例执行。这将允许我们为IO例程添加有意义的日志记录和监视。

2 个答案:

答案 0 :(得分:3)

有很多方法可以做到这一点,这取决于这是一个具有不同dll或单个项目的多项目应用程序。

如果是单个项目并且有大量代码让您担心变质/破坏,那么我建议如下:

  1. 鉴于在整个地方实例化的类clsIOProvider,在同一个项目中创建一个模块modIOProvider。
  2. 对于clsIOProvider中定义的每个方法/属性,在modIOProvider中创建相同的方法集。
  3. 这些方法的实现以及类的实例数据应该从clsIOProvider克隆到modIOProvider。
  4. 应该使用clsIOProvider中的所有方法和属性转发到modIOProvider中的实现。该类不应再具有实例数据。
  5. (可选)如果类需要使用构造函数和析构函数(Initialize / Terminate),也可以将它们转发给modIOProvider。在modIOProvider中添加单个instnace计数器以跟踪实例数。当实例计数器从0变为1时运行初始化代码,当实例计数器从1变为0时运行终止代码。
  6. 这样做的好处是您不必更改使用clsIOProvider类的地方的分数。他们很高兴地不知道对象现在实际上是一个单身人士。

    如果从头开始编写一个项目,我会稍微改变一下,但作为一个重构的appraoch,我已经概述了应该运行良好。

答案 1 :(得分:2)

只需创建和使用对象的一个​​实例就足够了。你如何做到这取决于你的代码它做什么以及从哪里调用它。

在一个过程中,您可以在具有实例的全局模块中使用单个变量,也可以使用在首次使用时创建它的工厂函数。

如果它由多个进程共享,则会使事情变得复杂,但可以使用ActiveX EXE和运行对象表来完成。