【发布时间】:2010-01-24 17:05:24
【问题描述】:
通常,每次我需要一个系统范围的对象时,我都会使用单例模式。 M 的问题是,为什么我不应该将对象实现为静态并自然地获得单个对象的行为?使用静态类型而不是单例分解对象有什么缺点吗?
【问题讨论】:
-
可能重复的东西本身作为副本关闭:stackoverflow.com/questions/839383/…
通常,每次我需要一个系统范围的对象时,我都会使用单例模式。 M 的问题是,为什么我不应该将对象实现为静态并自然地获得单个对象的行为?使用静态类型而不是单例分解对象有什么缺点吗?
【问题讨论】:
静态类型的可测试性要少得多(单元)。 单例可以传递(作为参数)和继承。
例子等请看这篇文章:
http://dotnetperls.com/singleton-static
一般而言,您应该避免使用系统范围的对象,因为这些对象表明您具有全局状态。单例通常用于管理对共享资源(而不是状态)的访问。
我相信至少有一个 GoF 记录在案,说在他们的书中包含单例是一个错误,并且在许多情况下它被用作反模式。
【讨论】:
取决于你想对对象做什么。如果它只是在其上调用方法,那么只需使用静态。如果你想传递对象,并用它做面向对象的东西,即多态性,那么就以对象的方式来做。
【讨论】: