Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 单例_Design Patterns_Singleton - Fatal编程技术网

Design patterns 单例

Design patterns 单例,design-patterns,singleton,Design Patterns,Singleton,GangofFour使用一个负载平衡器示例来演示singleton模式。我只是想知道为什么在这个例子中需要使用singleton?是否有其他真实的示例专门演示使用单例模式 我只是想知道为什么我想阻止创建一个对象的多个实例的更具体的原因。而且,我的意思是,如果有多个负载平衡器实例,那又怎样?我只是用一个实例来为ASP.NET应用程序实例化Flexwiki引擎,因为对于特定的应用程序,我只需要将wiki语法转换为HTML的功能。引擎本身消耗大量内存,我只需要一小部分内存就可以满足我的需求。此外,它不

GangofFour使用一个负载平衡器示例来演示singleton模式。我只是想知道为什么在这个例子中需要使用singleton?是否有其他真实的示例专门演示使用单例模式


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

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

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

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

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

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

如果一次有多个负载平衡器工作,那么负载平衡器就不会非常有效。如果一个负载平衡器将工作分配给一个设备,然后另一个平衡器将工作分配给同一个设备,那么系统很容易变得不平衡。多个负载平衡器需要相互通信才能完成工作。拥有一个平衡器实例更简单、更高效


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

有关何时应使用单例的一般性争论,请参阅谢谢!!我猜GoF负载平衡器是一个愚蠢的东西,因为它使用随机化器来选择服务器。所以,不管平衡器是单例的,随机发生器都会很容易地一次又一次地返回同一个服务器,因为随机并不意味着“不重复”。这个例子在哪一章?Singleton一章只有一个通用示例和MazeFactory示例,因此我没有看到任何负载平衡器。我最喜欢这个答案,但它仍然只讨论易用性,而不是Singleton满足的需求。我想我不明白的是,如果我写代码,只调用一次对象的构造函数,这不就是使类成为单例类的控制级别吗?如果保证只调用某个构造函数一次,那么请务必保持简单,不要使用单例。然而,问题是未来的可扩展性和变化。你能保证不再需要调用构造函数吗?如果没有,您可以通过类的引用来传递它,或者这会使您的设计更加复杂吗?控制对象构造是OO的一个重要方面,实际上只需要一些预先考虑。如果您不需要单例(或者希望避免使用单例时出现一些问题),简单性要求您不要使用单例:)