使转换器成为单例是否安全?
public interface IConverter<TFoo, TBar>
where TFoo : class, new()
where TBar : class, new()
{
TFoo ToFoo(TBar q);
TBar ToBar(TFoo q);
}
public class Converter : IConverter<Foo, Bar>
{
public Foo ToFoo(Bar b) {return new Foo(b);}
public Bar ToBar(Foo f) {return new Bar(f);}
}
答案 0 :(得分:2)
是的,这绝对没问题。没有状态,因此没有线程安全问题 - 并且没有原因有多个实例。这是一个相当自然的单身人士。
当然,为了灵活性和可测试性,尽可能使用接口是很好的 - 但是当您知道要使用该特定实现时,单例实例就可以了。
答案 1 :(得分:2)
是的,实施不依赖于州。
答案 2 :(得分:1)
是的,因为该类没有数据成员,您可以将其设为单例。
由于该类太小,您只需创建一个静态实例:
public class Converter : IConverter<Foo, Bar> {
private static _instance = new Converter();
public static Instance { get { return _instance; } }
public Foo ToFoo(Bar b) {return new Foo(b);}
public Bar ToBar(Foo f) {return new Bar(f);}
}