通过实现接口创建单例类有什么好处?

时间:2014-03-13 16:39:43

标签: c#

如果我有如下界面,

 public interface IMethods
  {
    void M1();
    void M2();
  }

然后我想通过继承上面的接口来创建一个单例类,那么在重用单例类的背景下有什么好处呢?

2 个答案:

答案 0 :(得分:3)

我不完全确定你要问的是什么,但是如果你要问"实现这个界面作为单身人士的好处是什么?"答案与单身人士总是提供的好处相同:"无论使用了多少个地方,都可以保证一个实例"。 Singleton用于强制实现具有实例访问权限与静态类和方法/属性的类的单个实例。示例实现:

public class Methods : IMethods
{
    // Singleton instance
    private static readonly IMethods _instance = new Methods();

    // Private constructor to enforce singleton
    private Methods()
    {

    }

    // The instance getter
    public static IMethods Instance
    {
        get
        {
            return _instance;
        }
    }

    public void M1()
    {

    }

    public void M2()
    {

    }
}

这会让你感到困惑的是Instance属性未在IMethods接口上公开,因此获取它需要实例类型为Methods而不是{ {1}}哪种方式违背了继承接口的目的。

通常,人们使用依赖注入框架来将接口的实现的生命周期设置为单例AKA共享实例。它更加友好和友好。

答案 1 :(得分:3)

单身方面只是IMethods合约的一个实现,为您提供单例模式的好处,假设这是您所需要的。

通过界面暴露单例的好处是,消费者不需要关心它是如何实现的,只需 实现它们就可以使用它。如果您突然需要常规实例而不是单身实例,则可以在不影响消费者的情况下进行更改。

DI容器经常发生这种情况,您通常可以将绑定的生命周期配置为单一范围。

如果直接使用单例并且从不真正使用该接口,那么界面中几乎没有用处。如果使用单例而不需要将其约束到单个实例,则采用单例模式几乎没有用。