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

时间:2011-06-09 10:15:09

标签: java

如果我有静态方法(固定行为)的类,那么单例(状态是固定的)类需要什么?

3 个答案:

答案 0 :(得分:2)

使用单例,如果需要,更容易替换实例,例如,用于测试。

答案 1 :(得分:1)

我认为使用单例而不是使用纯静态方法的类的最佳参数之一是,如果以后需要这样做,它会更容易引入多个实例。看到没有根本原因将类限制为单个实例的应用程序并不常见,但是作者没有设想任何代码扩展,并且发现使用静态方法更容易。然后,当您想要在以后扩展应用程序时,这样做会更加困难。

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

答案 2 :(得分:0)

下面的文章是在C#中,但我认为这对于java看起来也一样,它可以帮助你理解

使用带接口的单例

您可以像其他任何类一样使用带有接口的单例。在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.
    }
}

这里我们可以在任何接受接口的方法上使用单例。我们不需要一遍又一遍地重写任何东西。这些是面向对象的编程最佳实践。您可以在此处找到有关C#语言的接口类型的更详细示例。

C# Singleton Pattern Versus Static Class