还是最好使用其他设计模式?

最佳答案

几天前回答了一个类似的问题here, mocking a Singleton。原始帖子是针对C#.Net的关于 mock 单例行为的,但仍应适用。

关于单例模式,它本身没有任何问题-在许多情况下,我们希望集中逻辑和数据。但是,单例和静态类之间有很大的不同。将您的单例构建为静态类硬代码,以实现对应用程序中的每个使用者的实现-这使单元测试非常困难!

您要做的是为单例定义一个接口(interface),向消费者公开使用的方法。消费者又被传递给,该引用是由实现者(无论是谁实例化的,通常是您的应用程序,或者如果您熟悉依赖注入(inject)\控制反转)来对实现类的引用。

正是这个框架实例化了使用者,从而确保了只有一个实例在周围 float 。从静态类到接口(interface)引用确实没有那么大的飞跃(如上面的链接所示),您只是失去了可全局访问的实例的便利性-我知道我知道,全局引用非常诱人,但是Luke放弃了黑暗面,你也可以!

一般而言,最佳做法建议避免使用静态引用,并鼓励针对接口(interface)进行编程。请记住,仍然可以在这些约束条件下应用单例模式。遵循这些准则,并且在测试您的工作时应该没有问题:)

希望这可以帮助!

singleton!=公共(public)静态类,而不是 singleton ==单个实例

10-08 04:56