首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单点设计和其他设计问题

单点设计和其他设计问题
EN

Stack Overflow用户
提问于 2013-10-21 09:43:23
回答 1查看 145关注 0票数 0

我使用过不同的语言,如C++/Java和当前的AS3。大多数应用是计算机视觉和小型2D电脑游戏。我工作过的大多数公司,他们都使用AS3这样的语言来简单地检索元素或类。他们的问题基本上是,他们需要一些变量或调用其他类的其他函数。在像AS3这样的语言中,没有私有构造函数,他们编写了一个恶意代码来防止新的实例。

在Java和C++中,我还需要使用其他类的成员或在不同的类中调用它们的函数。

问题是,是否有更好的或另一种设计,让其他类在不使用单例的情况下相互交互?我觉得作文是答案,但我需要更详细的解决方案或设计建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-21 09:51:26

Singleton模式错误地将两个问题混为一谈(或者我应该说,它的大多数或所有观察到的用法都是这样):

  • 您需要一个全局变量
  • 您希望将程序中存在的给定类的实例数量限制在1。

可变的全局状态使您的程序更难推理。但是,好吧,有时候这是你想要的,你可以这样做,但不要太骄傲。根据语言的不同,您可能需要使用一些愚蠢的技巧来隔离依赖于全局状态的单元,以便进行测试。

对后一种限制几乎没有充分的理由。如果您只想使用类的一个实例,请只创建其中一个实例。您不必编写一个特殊的类来告诉自己只创建其中一个类。

所以:如果您想要一个类的全局实例,创建一个类,就像创建一个Singleton实例一样,不要费心去阻止其他实例的创建。

如果您希望类的每个实例行为相同,那么请考虑"Borg模式“:编写一个类,它的实例没有自己的状态,但是每个实例都在全局状态上运行。

即使您决定确实需要它的类型唯一的对象,您仍然应该正确地评估全局访问它是否合适,或者它是否应该是使用它的组件的注入依赖项。

关于我能想到的唯一的特例是,对语言有特殊意义的值的类型可以合法地是单例的,以便允许实现中的特殊技巧。例如,Python中的None是一个类型为NoneType的单例。我想,在所有这种情况下,这种类型都是不可变的。

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

https://stackoverflow.com/questions/19491052

复制
相关文章

相似问题

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