public interface IDoSomething
public class ClassA : IDoSomething
public class ClassB : IDoSomething
public class ClassC : IDoSomething
我有一个由几个类实现的接口,还有一个代码块需要解析一些数据,然后创建这些对象的新实例。现在我有一个很大的switch语句来决定使用哪个对象,但必须有更好的方法。
我希望能够创建也实现接口的新类,对类进行编码,而不必重构代码(例如在switch语句中添加大小写)。
实施此类内容的最佳做法是什么?
这是我当前(糟糕的)切换语句的样子:
switch (flag)
{
case 1:
return new ClassA();
case 2:
return new ClassB();
case 3:
return new ClassC();
default:
return null;
}
答案 0 :(得分:0)
这是何时使用abstract factory的一个很好的例子。我在this page上举了一个例子。如果向下滚动到第二个代码块,您将看到它处理相同的场景 - 我需要返回一个接口的实现,并且我想使用一些值来告诉我要返回哪个实现。
您可以在不使用DI容器的情况下执行此操作,但它们对此有好处,因为当它们创建IDoSomething
的实现时,如果该实现也具有依赖关系,则它也会创建它们。因此,如果ClassA
需要将某些内容传递给它的构造函数,并且某些内容需要传递给它的构造函数,那么DI容器会处理所有这些。
我喜欢温莎,因为它提供了nice implementation的抽象工厂。
这个答案的问题在于我建议你深入研究依赖注入以解决这个特殊问题。但我真的推荐它。您正在尝试编程到接口,它促进了这种类型的设计。这需要你正在做的事情并使它变得如此容易,你会越来越多地做到这一点。
我需要写一篇博文,从头开始描述它。