静态类和单例模式之间存在什么实际的区别?
两者都可以在没有实例化的情况下调用,两者都只提供一个“实例”,而且都不是线程安全的。还有其他区别吗?
静态类和单例模式之间存在什么实际的区别?
两者都可以在没有实例化的情况下调用,两者都只提供一个“实例”,而且都不是线程安全的。还有其他区别吗?
当前回答
我同意这个定义:
单词“single”表示整个应用程序生命周期中的单个对象循环,因此范围在应用程序级别。静态不具有任何Object指针,因此作用域位于AppDomain级别。此外,两者都应实现为线程安全。
你可以发现其他有趣的区别:Singleton模式与静态类
其他回答
我同意这个定义:
单词“single”表示整个应用程序生命周期中的单个对象循环,因此范围在应用程序级别。静态不具有任何Object指针,因此作用域位于AppDomain级别。此外,两者都应实现为线程安全。
你可以发现其他有趣的区别:Singleton模式与静态类
我们可以创建单例类的对象并将其传递给方法。Singleton类对继承没有任何限制。我们不能处理静态类的对象,但可以处理单例类。
我阅读了以下内容,认为这也很有意义:
打理业务记住,最重要的OO规则之一是对象对自己负责。这意味着关于类的生命周期的问题应该在类中处理,而不是委托给静态等语言构造。
来自《面向对象的思维过程》第四版。
Java中的静态类只有静态方法。这是一个集装箱功能。它是基于程序编程设计创建的。
Singleton类是面向对象设计中的一种模式。单身汉类在JVM中只有一个对象实例。这种模式是以始终只有一个实例的方式实现JVM中存在的类。
与静态类相比,Singleton模式有几个优点。首先,单例可以扩展类和实现接口,而静态类不能(它可以扩展类,但不继承它们的实例成员)。单例可以延迟或异步初始化,而静态类通常在首次加载时初始化,这会导致潜在的类加载器问题。然而,最重要的优点是,可以在不强迫用户假设只有一个实例的情况下以多态的方式处理单态。