什么是单例的替代品
2022-08-31 09:06:27
我们有一个类,用于保存应用程序的配置信息。它曾经是一个单例。经过一些体系结构审查,我们被告知要删除单例。我们确实看到了在单元测试中不使用单例的一些好处,因为我们可以一次测试所有不同的配置。
如果没有单例,我们必须在代码中的任何位置传递实例。它变得如此混乱,所以我们写了一个单例包装器。现在我们正在将相同的代码移植到PHP和.NET,我想知道是否有更好的模式可用于配置对象。
我们有一个类,用于保存应用程序的配置信息。它曾经是一个单例。经过一些体系结构审查,我们被告知要删除单例。我们确实看到了在单元测试中不使用单例的一些好处,因为我们可以一次测试所有不同的配置。
如果没有单例,我们必须在代码中的任何位置传递实例。它变得如此混乱,所以我们写了一个单例包装器。现在我们正在将相同的代码移植到PHP和.NET,我想知道是否有更好的模式可用于配置对象。
Google测试博客有一系列关于避免单例的条目(为了创建可测试的代码)。也许这可以帮助你:
上一篇文章详细介绍了如何将新对象的创建移动到工厂中,以便您可以避免使用单例。值得一读。
简而言之,我们将所有新操作员转移到工厂。我们将具有相似生命周期的所有对象分组到一个工厂中。
最好的方法是改用工厂模式。构造类的新实例(在工厂中)时,可以将“global”数据插入到新构造的对象中,作为对单个实例(存储在工厂类中)的引用,也可以通过将相关数据复制到新对象中来插入。
然后,所有对象都将包含过去位于单例中的数据。我不认为总体上有太大的区别,但它可以让你的代码更容易阅读。