可可的单身人士,他们是邪恶的吗?

时间:2012-11-09 10:26:32

标签: objective-c cocoa oop design-patterns singleton

我在这个网站上看到很多“单身人士都是邪恶的”。 这几乎让我相信单身人士是病态的骗子。 但, 如果这是真的,为什么可可有这么多的单身人士呢?像shareApplication,shareManager等。 而且我想知道如果我不使用单身模式,我怎么能做同样的事情呢。例如,确保只有一个实例,并在需要时访问它。

所以我会怀疑这句话,直到我发现有更好的方法。

请帮帮我。感谢

3 个答案:

答案 0 :(得分:3)

没有任何单一的功能或模式本质上是邪恶的。即使goto有其使用,有时也可以提高可读性。 “单身人士是邪恶的”来自许多新手开发者容易滥用他们的事实。所以这是一个常识,有时候常识并不是最好的解决方案。

在您的示例中,shared...不是技术上的单身人士。您可以同时创建数千个UIApplicationNSFileManager个实例。它们更像是服务定位器(“找到我的应用程序”,“找到我的默认文件管理器”)。这些方法为我们提供了一些有用的共享值,我们需要99%的时间。虽然这可以使单元测试更加有益,但是值得。

答案 1 :(得分:0)

单身人士通常有助于存储您的全球数据。

然而,单身人士通常只是作为各种随机方法和变量的垃圾场而没有任何顺序或理由。

  

http://blogs.msdn.com/b/scottdensmore/archive/2004/05/25/140827.aspx

这可能是人们不喜欢使用单身人士的原因。

如果你没有滥用单身人士的混乱行为,那么你不应该避免在我看来使用它。

答案 2 :(得分:0)

Cocoa中有这么多的单身人士,因为它很久以前设计很久就宣告“邪恶”和“被认为有害”的一切都有问题。

单身人士并非完全邪恶。如果使用得当,它们在很多情况下都能很好地工作你已经发现了与它们相关的问题,但这并不意味着你必须立即摆脱它们,否则世界将会结束。一些项目的现实是如此,所以你不会遇到单身人士的问题。

显然,当它们已经存在时,你无法避免使用库单例。每当您需要某个对象(如NSApplication或NSWorkspace)时,您应该使用他们的sharedApplication / sharedWorkspace方法,这就是系统框架的设计方式。

在设计自己的代码时,您可以确保对象仅由工厂创建,并以某种方式对某些工厂方法进行编码,以便在以前请求此类对象时返回先前的实例。这种设计避免了全局和单体的典型缺点,即无法替代它们而不是它们。