关于设计模式:是的..我知道..我是一个傻瓜..那么什么是单身人士?

Yeah.. I know.. I'm a simpleton.. So what's a Singleton?

我试过几次去理解单身汉是什么。也许我太直观了……所以,任何人都能用一个简单的类比来分解它吗?

类似职位:

  • 初始化单例的不同方法
  • 单人间:怎么用
  • 这是一个很好的使用单件模式吗?
  • 单身汉有什么不好?
  • 单人间:怎么用
  • 单身汉:好的设计还是拐杖?
  • .NET中的全局与单例
  • 关于设计模式:何时使用单例?
  • Java中带参数的SuntLon
  • 在Java中实现单模式的有效方法是什么?
  • 单件的替代品是什么
  • 使用单例类的最常见示例班
  • https://stackoverflow.com/questions/1395766/asp-net-objectDatasource-singleton
  • 在.NET远程处理中使用singleton还是single call?
  • 什么是单人课?它能帮助我为两个相关服务运行一个类的单个实例吗?


根据要求,以下是一些类比:

    百万千克1地球百万千克1百万千克1宇宙百万千克1百万千克1元素氧(有其他元素,但只有一个氧)。有很多氧分子,但只有一种典型的氧元素。)百万千克1百万千克1真的概念百万千克1百万千克1虚假的概念百万千克1

您可以实例化许多真实的对象,但它们都引用相同的实际项目(即,真实的普遍概念)。根据应用程序的域,可能会有更具体的示例:

    百万千克1数据库连接百万千克1百万千克1应用程序的主线程百万千克1百万千克1表示硬件设备的任何对象(即,您只想实例化一个表示CPU0的对象)。百万千克1


singleton是一个类,应用程序中只能有一个实例。然后在整个应用程序中共享该实例。

下面是一个可能有帮助的链接(包括如何使C中的singleton线程安全):

在C语言中实现单例模式#


单胎是绵羊服装的一个全局变量:)

http://googletesting.blogspot.com/2008/08/root-cause-of-singletons.html


当必须确保一个类只有一个实例,并且必须从代码中的多个位置访问该对象时,singleton非常有用。

如果一次可以使用类的多个实例是有意义的,那么就不需要单一实例。

以下是关于在何处使用singletons的一些信息:http://www.ibm.com/developerworks/webservices/library/co-single.html

根据前面提到的文章:

To decide whether a class is truly a
singleton, you must ask yourself some
questions.

  • Will every application use this class exactly the same way?
    (exactly is the key word)
  • Will every application ever need only one instance of this class?
    (ever and one are the key words)
  • Should the clients of this class be unaware of the application they are
    part of?

    If you answer yes to all three questions, then you've found a
    singleton. The key points here are
    that a class is only a singleton if
    all applications treat it exactly the
    same and if its clients can use the
    class without an application context.


singleton是一个类,它只能创建一个实例。

这通常是通过有一个私有的构造函数来实现的,它被分配给一个静态变量,然后通过一个公共方法来访问。

使用单件有一些问题,包括:

    百万千克1它们使测试变得困难百万千克1百万千克1他们不能分等级百万千克1百万千克1一旦实例化,实例将永远存在百万千克1

有关singleton的进一步描述,以及另一个可能有用的模式"monostate":http://www.objectmentor.com/resources/articles/singleton和monostate.pdf


有一个很好的谷歌技术演讲,演讲者在演讲中谈到了全球状况(包括单子),以及为什么测试几乎不可能:

清洁代码谈判——"全球国家和单身汉"

演讲者区分了他所称的单例(大写"s"),即采取措施防止类被多次实例化(即,通常使用静态getInstance方法和私有构造函数),以及单例(小写"s"),其中只需要一个实例,但CLA中没有内置任何内容。防止创建多个实例。


单身有时不可能这么单身。请看这里:当单身不是单身时?,Sun提供的文章。

一个建议:不要使用它。它只是不好,可能会在应用程序中造成严重的性能瓶颈,而测试单例类的工作是不值得的。

从上面提到的维基百科文章:

It should be noted that this pattern makes unit testing far more difficult, as it introduces Global state into an application.

另一个值得一看的资源是谷歌测试博客上的这篇文章。


除了它作为一个特殊的设计模式的位置,单例也可以被认为是简单的一件事。它在编程中的应用无疑源于它在数学中的应用,在数学中,单例数只是一个数的集合。