Tag: 单例

辛格尔顿:应该如何使用它

编辑:从另一个问题,我提供了一个答案,有很多关于单身人士的问题/答案的链接:关于单身人士的更多信息在这里: 所以我已经读了线程单身人士:好devise还是拐杖? 争论仍然激烈。 我将Singletons看作devise模式(好的和坏的)。 单身人士的问题不是模式,而是用户(对不起,每个人)。 每个人和他们的父亲认为他们可以正确地执行一个(而且从我做过的多次采访中,大多数人不能)。 也因为大家都认为他们可以实现一个正确的单身人士,他们滥用模式,并在不适当的情况下使用它(用单身人士replace全局variables!)。 所以需要回答的主要问题是: 什么时候应该使用Singleton 你如何正确实施一个单身人士 我对这篇文章的希望是,我们可以在一个地方收集(而不是必须谷歌和search多个网站)何时(以及如何)正确使用单一的权威来源。 同样适当的是一个反用例和常见的错误实现清单,解释了为什么他们不能工作,并为了良好的实现他们的弱点。 所以让球滚动: 我会握住我的手说,这是我使用,但可能有问题。 我喜欢“Scott Myers”在他的着作“Effective C ++”中处理这个主题, 好的情况下使用单身(不是很多): logging框架 线程回收池 /* * C++ Singleton * Limitation: Single Threaded Design * See: http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf * For problems associated with locking in multi threaded applications * * Limitation: * If you use this Singleton (A) within a […]

在Python中创build一个单例

这个问题不是讨论单例devise模式是否合意,是反模式还是任何宗教战争,而是讨论如何在python中最好的实现这种模式。 在这种情况下,我把“最pythonic”定义为遵循“最不惊讶的原则” 。 我有多个类将成为单身(我的用例是一个logging器,但这不是重要的)。 当我可以简单地inheritance或装饰时,我不希望杂乱地加上几个类似的东西。 最好的方法: 方法1:一个装饰器 def singleton(class_): instances = {} def getinstance(*args, **kwargs): if class_ not in instances: instances[class_] = class_(*args, **kwargs) return instances[class_] return getinstance @singleton class MyClass(BaseClass): pass 优点 装饰器是以一种比多重inheritance更直观的方式添加的。 缺点 虽然使用MyClass()创build的对象将是真正的单例对象,MyClass本身是一个函数,而不是一个类,所以你不能从它调用类的方法。 另外对于m = MyClass(); n = MyClass(); o = type(n)(); m = MyClass(); n = MyClass(); o = type(n)(); 那么m […]

静态类和单例模式之间的区别?

静态类和单例模式之间存在什么真正的(即实际的)区别? 两者都可以在没有实例化的情况下被调用,都只提供一个“实例”,而且它们都不是线程安全的。 还有其他的区别吗?

我的Objective-C单例应该是什么样子?

我的singleton访问器方法通常是以下的一些变体: static MyClass *gInstance = NULL; + (MyClass *)instance { @synchronized(self) { if (gInstance == NULL) gInstance = [[self alloc] init]; } return(gInstance); } 我能做些什么来改善呢?

如何在Android中声明全局variables?

我正在创build一个需要login的应用程序。 我创build了主要和login活动。 在主要活动onCreate方法中,我添加了以下条件: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); … loadSettings(); if(strSessionString == null) { login(); } … } 在login表单终止时执行的onActivityResult方法如下所示: @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(requestCode) { case(SHOW_SUBACTICITY_LOGIN): { if(resultCode == Activity.RESULT_OK) { strSessionString = data.getStringExtra(Login.SESSIONSTRING); connectionAvailable = true; strUsername = data.getStringExtra(Login.USERNAME); } } } 问题是login表单有时会出现两次( […]

C ++单例devise模式

最近我遇到了C ++的Singletondevise模式的实现/实现。 它看起来像这样(我从现实生活中采用了它): // a lot of methods are omitted here class Singleton { public: static Singleton* getInstance( ); ~Singleton( ); private: Singleton( ); static Singleton* instance; }; 从这个声明我可以推断实例字段是在堆上启动的。 这意味着有一个内存分配。 对于我来说,完全不清楚的是什么时候内存将被释放? 还是有一个错误和内存泄漏? 这似乎是在执行中有问题。 我的主要问题是,我如何以正确的方式执行它?

Ruby中的自我成语

class << self在Ruby中做了什么?