Java 使用单例类和使用静态方法的类有什么区别?

Java 使用单例类和使用静态方法的类有什么区别?,java,Java,若我有一个带有静态方法(固定行为)的类,那个么singleton(状态是固定的)类需要什么 如果需要的话,使用singleton可以更容易地替换实例,例如用于测试。下面的文章是C语言的,但我认为这对于java也是一样的,have to it可能会帮助您理解 使用带有接口的单例 您可以像任何其他类一样将单例与接口一起使用。在C#中,接口是一个契约,具有接口的对象必须满足该接口的所有要求 单例可以与接口一起使用 /// <summary> /// Stores signatures of

若我有一个带有静态方法(固定行为)的类,那个么singleton(状态是固定的)类需要什么

如果需要的话,使用singleton可以更容易地替换实例,例如用于测试。

下面的文章是C语言的,但我认为这对于java也是一样的,have to it可能会帮助您理解

使用带有接口的单例

您可以像任何其他类一样将单例与接口一起使用。在C#中,接口是一个契约,具有接口的对象必须满足该接口的所有要求

单例可以与接口一起使用

/// <summary>
/// Stores signatures of various important methods related to the site.
/// </summary>
public interface ISiteInterface
{
};

/// <summary>
/// Skeleton of the singleton that inherits the interface.
/// </summary>
class SiteStructure : ISiteInterface
{
    // Implements all ISiteInterface methods.
    // [omitted]
}

/// <summary>
/// Here is an example class where we use a singleton with the interface.
/// </summary>
class TestClass
{
    /// <summary>
    /// Sample.
    /// </summary>
    public TestClass()
    {
    // Send singleton object to any function that can take its interface.
    SiteStructure site = SiteStructure.Instance;
    CustomMethod((ISiteInterface)site);
    }

    /// <summary>
    /// Receives a singleton that adheres to the ISiteInterface interface.
    /// </summary>
    private void CustomMethod(ISiteInterface interfaceObject)
    {
    // Use the singleton by its interface.
    }
}
//
///存储与站点相关的各种重要方法的签名。
/// 
公共接口是接口
{
};
/// 
///继承接口的单例的骨架。
/// 
类站点结构:ISiteInterface
{
//实现所有ISiteInterface方法。
//[省略]
}
/// 
///下面是一个示例类,其中我们使用一个带有接口的单例。
/// 
类TestClass
{
/// 
///样品。
/// 
公共测试类()
{
//将singleton对象发送到任何可以获取其接口的函数。
SiteStructure site=SiteStructure.Instance;
CustomMethod((ISiteInterface)站点);
}
/// 
///接收依附于ISiteInterface接口的单例。
/// 
私有void自定义方法(ISiteInterface interfaceObject)
{
//通过其接口使用singleton。
}
}
在这里,我们可以在任何接受接口的方法上使用单例。我们不需要一遍又一遍地重写任何东西。这些是面向对象编程的最佳实践。您可以在这里找到关于C语言接口类型的更详细示例


我认为使用单例而不是纯静态方法的类的最佳理由之一是,如果后来发现需要,可以更容易地引入多个实例。在没有基本理由将类限制为单个实例的应用程序中并不少见,但作者没有设想对其代码进行任何扩展,并且发现使用静态方法更容易。然后,当您以后想要扩展应用程序时,就很难做到这一点


能够替换实例进行测试(或其他原因)也是一个很好的观点,能够实现接口也有助于这一点。

单例类可以实现接口。静态方法不需要额外的对象。尽管针对不同的语言,但这个问题是100%相关的:在singletone中,所有方法都将由实例调用,而在另一端,它们将由类直接调用。