如果我有如下界面,
public interface IMethods
{
void M1();
void M2();
}
然后我想通过继承上面的接口来创建一个单例类,那么在重用单例类的背景下有什么好处呢?
答案 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容器经常发生这种情况,您通常可以将绑定的生命周期配置为单一范围。
如果直接使用单例并且从不真正使用该接口,那么界面中几乎没有用处。如果使用单例而不需要将其约束到单个实例,则采用单例模式几乎没有用。