如果我有静态方法(固定行为)的类,那么单例(状态是固定的)类需要什么?
答案 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#语言的接口类型的更详细示例。