c# - Singleton 设计模式是否内置于任何框架中?

标签 c# java frameworks singleton

使用单例类可以保证类的一个实例将控制权交给程序员。真的很有用。

我想知道例如给定框架中是否存在单例接口(interface)以绕过显式创建/添加单例接口(interface)的需要?

贴花会很方便:

public sealed class MySingleton : ISingleton  //or a different class 
    { ... }

然后期望该类只被实例化一次。

这是个好主意,还是我的想法有点离题? :)

最佳答案

I was wondering if for example a Singleton Interface existed in a given framework to bypass the need to create/add one explicitly?

它不存在也不可能存在。单例基本上需要一个static Singleton getInstance() 方法,但是因为它是static,所以不能定义为抽象(接口(interface))方法。这也是有道理的,只能有一个单例实现,不能有多个。抽象它是没有意义的。

您需要自己对完整的单例进行样板化。然而,我高度质疑这有什么用。防止堆栈溢出或内存错误当然不是它的唯一目的。编写好的代码可以避免这种情况。单例仅在您希望最终用户始终处理相同 实例时才有用。顺便说一句,没有单例模式也可以做得很好。要么只是将其声明为 static,要么使用普通框架可以为您提供的“应用程序范围”概念。

而不是单例,而是寻找 inversion of control (依赖注入(inject))。顺便说一下,这也正是 Spring 正在做的事情。他们不使用“纯”单例。他们的用词选择很糟糕。

另见:

关于c# - Singleton 设计模式是否内置于任何框架中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3233751/

相关文章:

c# - 作为非托管 HWND 子级的托管窗体

c# - 在 vb.net 网站中设置 c# web api

java - 尝试从 Java 哈希表中获取对象

IOS动态框架,外部符号成为发布版本的非外部符号

unit-testing - 有些东西你就是不能测试?

php - PRADO的用户多吗?

c# - 正则表达式允许数字、破折号、逗号

c# - Silverlight Web 应用程序未处理的异常代码 4004

java - getApplicationContext() 中的空指针

java - 如何在 Parcel 中使用 writeStringArray() 和 readStringArray()