静态类和单例模式之间有什么真正的(即实用的)区别?
两者都可以在不实例化的情况下调用,它们都只提供一个“实例”,而且它们都不是线程安全的。还有其他区别吗?
发布于 2009-02-06 08:30:57
与静态类相比,单例模式有几个优点。首先,单例可以扩展类和实现接口,而静态类不能(它可以扩展类,但不继承它们的实例成员)。单例可以延迟或异步初始化,而静态类通常在第一次加载时初始化,这会导致潜在的类加载器问题。然而,最重要的优点是,单例可以多态处理,而不会迫使用户假设只有一个实例。
发布于 2010-12-31 04:55:55
static
类不适用于任何需要状态的东西。它对于把一堆函数放在一起很有用,比如Math
(或者项目中的Utils
)。因此,类名只是给我们提供了一个线索,我们可以在哪里找到函数,仅此而已。
Singleton
是我最喜欢的模式,我使用它在单点进行管理。它比static
类更灵活,可以维护它的状态。它可以实现接口,继承其他类,并允许继承。
我在static
和singleton
之间选择的规则
如果有一堆函数应该放在一起,那么static
是最好的选择。任何其他需要对某些资源进行单一访问的东西,都可以作为singleton
实现。
发布于 2009-02-06 08:35:14
静态类是只有静态方法的类,更好的说法是“函数”。静态类中体现的设计风格纯粹是过程化的。
另一方面,Singleton是一种特定于OO设计的模式。它是一个对象的实例(具有其固有的所有可能性,例如多态性),具有一个创建过程,该过程确保在该特定角色的整个生命周期中只有一个实例。
https://stackoverflow.com/questions/519520
复制相似问题