首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单例或非单例

单例或非单例
EN

Stack Overflow用户
提问于 2009-12-17 20:19:03
回答 3查看 2.7K关注 0票数 9

我有一个windows服务running.Inside这个服务,我已经托管了一些服务(WCF)。我需要有一个“内存中的数据持有者”类。此类的用途是在windows服务运行期间保存非持久性数据。必须可以通过WCF服务访问此类。他们将一些值放在这个类中,或者从这个类中检索一些值。

我首先想到的是一个单例类,我认为这个模式非常适合这种情况。但后来我读到了一些帖子,说单件类实际上并没有那么好。

那么,对于这种情况,还有其他选择吗?或者这个单例是可以的吗?工厂方法怎么样?但是,我在哪里可以找到这些对象的引用呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-17 20:36:46

单例设计模式真的应该被重新标记为反模式。这是邪恶的。不要用它。

一种更好的替代方法是使用依赖项注入接口( Dependency Injection,DI)并注入一个类,您可以使用该类来保存所需的非持久性数据。

很多人没有意识到WCF支持依赖注入(DI)模式,比如构造器注入,没有太多麻烦。

如果您将注入类的作用域作为长期对象(通常称为Singleton生存期样式,但不要与Singleton设计模式混淆),则可以在两次调用之间继续访问相同的实例。

然而,无论您何时使用共享对象(无论您使用单例作为设计模式还是生命周期样式),您都必须准备好处理的多线程问题。

其中,this post描述了如何在没有默认构造函数的情况下将依赖项注入到WCF服务实现中。

票数 15
EN

Stack Overflow用户

发布于 2009-12-17 20:43:08

我很想知道为什么人们不喜欢单例,我很乐意在上面的场景中使用它,除非有人能告诉我为什么不喜欢它。

这是一个易于理解和实现的简单模式,我认为在6个月的时间内保持它的简单是一件好事,因为你或其他人必须维护你的代码

编辑对于为什么有些人不喜欢单例模式做了更多的挖掘,在问题:What's Alternative to Singleton中提出了一系列有用的替代方案,这解决了该模式的单元测试缺陷。

编辑2我终于相信单调可能是不好的。http://googletesting.blogspot.com/2008/08/by-miko-hevery-so-you-join-new-project.html提出了一个很好的观点,在维护方面,在API级声明依赖项使程序员更容易掌握依赖项。

票数 6
EN

Stack Overflow用户

发布于 2009-12-17 20:25:06

为什么你需要一个单例来做这个?

您真的需要将此类的实例限制为单个实例吗?如果没有,就不要使用单例--你不需要它,它只会给你的类增加复杂性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1921382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档