什么是单身人士的替代品

Joh*_*ill 112 java singleton design-patterns

我们有一个类,用于保存应用程序的配置信息.它曾经是一个单身人士.经过一些建筑评论后,我们被告知要删除单身人士.我们确实看到了在单元测试中不使用单例的一些好处,因为我们可以同时测试不同的配置.

如果没有单例,我们必须在代码中的任何地方传递实例.它变得如此混乱,所以我们编写了一个单独的包装器.现在我们将相同的代码移植到PHP和.NET,我想知道是否有更好的模式我们可以用于配置对象.

Fra*_*nkS 127

谷歌测试博客有一系列的关于避免(以创建可测试的代码)辛格尔顿条目.也许这可以帮助你:

上一篇文章详细解释了如何将新对象的创建移动到工厂中,因此您可以避免使用单例.值得一读.

简而言之,我们将所有新运营商转移到工厂.我们将具有相似生命周期的所有对象组合到一个工厂中.

  • ***使用依赖注射来避免单身 (3认同)
  • 好吧,不是真的.例如,"请勿使用静态方法"建议直接针对Scott Meyers/Herb Sutters的最小接口原则.有一些有用的建议,但它们缺乏多种思想的贡献. (2认同)

gbj*_*anb 15

最好的方法是使用Factory模式.构造类的新实例(在工厂中)时,可以将"全局"数据插入到新构造的对象中,作为对单个实例的引用(存储在工厂类中)或通过复制相关实例数据进入新对象.

然后,所有对象都将包含以前在单例中存在的数据.我认为总体上没有太大差异,但它可以使您的代码更容易阅读.

  • 我不同意“最好的方法”的说法,但+1是一个很好的选择。 (2认同)
  • @EastGhostCom:我们不妨使用单身并停止尝试让自己变得困难:) (2认同)

小智 5

我可能在这里说明显而易见的,但是有没有理由不能使用像SpringGuice这样的依赖注入框架?(我相信Spring现在也可用于.NET).

这样,框架可以保存配置对象的单个副本,并且您的bean(服务,DAO,等等)不必担心查找它.

这是我经常采取的方法!