Singleton v / s类,带有Java中的静态成员和方法

可能重复:
静态类和单例模式之间的区别?

为什么要求只有一个实例? 使用具有静态成员变量和静态方法的类可以实现相同的目的。

据我所知,可能有两种可能的答案 -

  • 当你的课程需要有状态并且你只需要它的一个对象时。 从设计角度来看,带有静态方法和变量的类被认为是Utility类,并且不应该保持任何状态。

  • 如果您的类需要参与多态性,并且只需要继承树中的类的一个对象(es)。

  • 如果有人能够从真实生活场景或任何Singleton对象需要参与Polymorphism / Inheritance的Java API中提供示例,这将会非常有帮助吗?


    Collections.emptySet()是单例的一个典型例子,不能作为静态类来实现,因为显然,它的目标是成为java.util.Set接口的一个实例。 创建并不昂贵,但是每次需要空集时创建一个新实例会很愚蠢,因为唯一实例可以被重用。


    执行日志记录或数据库通用访问的类通常遵循单例模式。 基本上任何应该有实例方法的东西都是昂贵的。


    范围和行为是不同的问题,不应混用。 您可能希望您的对象在每次使用,每个线程,每个Web请求,每个会话或全局(Singleton)都可用。 进行这些调整的原因可能是由于资源管理和最终的表现。 如果你改变它的范围,你的类中的行为不应该改变。

    Singleton是一种采取常规对象并通过一点点螺栓代码控制其范围的模式。 理想情况下,你真的不应该真正处理你的对象内的范围,并将其委托给工厂或容器。

    链接地址: http://www.djcxy.com/p/78827.html

    上一篇: Singleton v/s class with static members & methods in Java

    下一篇: C#: Differences between Singleton and Static Pattern