单身人士的例子

时间:2009-06-13 02:37:24

标签: design-patterns singleton

Gang of four使用负载均衡器示例来演示单例模式。我只是想知道为什么在这个例子中需要使用单例?有没有其他真正的例子专门演示使用单例模式?

我只是想知道为什么我想要阻止创建一个对象的多个实例的更具体的原因。而且,我的意思是,如果有多个负载均衡器实例,那又是什么?

4 个答案:

答案 0 :(得分:2)

如果一次运行多个负载均衡器,则负载均衡器不会非常有效。如果一个负载平衡器将工作分配给设备,则另一个平衡器出现并将工作分配给同一设备,系统很容易变得不平衡。多个负载平衡器需要相互通信才能完成工作。拥有一个平衡器实例更简单,更有效。

调用Singleton的应用程序的另一个示例是一个软件模块,其作用是与串行端口上的设备通信。我最近实现了一个与电机控制器通信的类,我想非常确定只有一个类访问串行线。将此类实现为Singleton可确保永远不会创建两个实例,从而避免在串行线上发生争用。

答案 1 :(得分:0)

我刚用一个实例化ASP.NET应用程序的Flexwiki引擎,因为对于那个特定的应用程序,我只需要将wiki语法转换为HTML的功能。引擎本身消耗大量内存,我只需要一小部分内存来满足我的要求。此外,它不依赖于单个用户,因此可以存储在缓存中。拥有引擎的另一个实例将毫无意义,因为除了浪费内存之外它没有任何其他用途。

答案 2 :(得分:0)

如果您有客户端 - 服务器应用程序,那么您的服务可能每个连接只需要一个客户端。例如,我需要使用我的服务注册回调:

public class myClient
{
    public myClient()
    {
        myService = // get service somehow
        myService.Init(myCallback);
    }
    public void myCallback() { /* do something*/}
}

如果你创建myClient的第二个实例,你将用第二个回覆第一个回调。

答案 3 :(得分:0)

在一个应用程序中,我有一个清单,用于保存从服务器检索的XML数据。这充当了一种“缓存”,以防止查找多次发生。我没有将对象的引用从对象传递给对象,而是创建了一个Singleton,它可以在运行时由它所需的任何对象访问。