静态对比 在SO中已经多次讨论过单身人士问题.
然而,所有的答案都指出了单身人士的许多优点.
我的问题是 - 静态类优于单例的优点是什么?为什么不每次只选择单身?
一般的问题是我喜欢构建logger类,从我的应用程序中的不同类写入单个日志文件,logger类应该是单线程还是静态类
我有一堆函数可以在我的应用程序中返回常用的UIViews,例如
+ (UIView *) getLikeRow:(CGRect) frame ofType:(LikeType) type
Run Code Online (Sandbox Code Playgroud)
到目前为止,我一直在使用静态方法,但最近我也注意到了这个sharedManager概念.现在我想知道我是否应该使用sharedManager.
使用静态方法与sharedManager单例的实例方法有什么区别和优点/缺点?
我已经阅读了这个问题和一些类似的问题,我想知道是否有任何情况我应该在单例模式上使用静态类?
目前我正在使用一个相当简单的单例实现.但是,我从来没有在网上看到过这样的建议,这让我觉得它可能有问题......
class Singleton:
def __init__():
raise ...
@staticmethod
def some():
pass
@staticmethod
def another():
pass
Run Code Online (Sandbox Code Playgroud)
单例的这种实现是否有任何缺点(使所有类成员都是静态的).它有点类似于使用模块作为单例,除了你把所有东西都包装在一个类中.
编辑:我知道在Python中实现单例的其他方法.我不喜欢它们的是它们都不是显式的(这违背了Python zen):
因为我做的a = Class()不是类似的事情a = Class.Instance(),所以我在处理具有共享状态的对象时并不明显(参见注释#1).如果所有成员都是静态的,我至少有Class.someMethod()哪种类型表明它是单身.我不喜欢这种方法的是你不能使用构造函数和析构函数,它消除了单例对自由函数的主要优势,这是你在创建和销毁它们时可以做的事情(参见注释#2) .
注意#1:我知道我不应该关心单身人士的状态(如果我这样做,那么它首先不应该是单身人士).我仍然希望明确它是什么类.
注意#2:创建单例时,可以在其构造函数中进行一些实例化.例如,在处理图形库的单例中,您可以在constrctor中初始化库.这种方式实例化和解除实例在sinleton的构造函数和析构函数中自动发生.
或者在ResourceManager中:析构函数可以检查在销毁时是否仍然存在内存中的资源并相应地执行操作.
如果你使用自由函数而不是单例,你必须手动完成所有这些.