每个班级都应该有工厂级吗?

时间:2017-02-24 17:04:32

标签: c# oop design-patterns dependency-injection

我的理解是工厂类的主要目的是防止类硬编码相互引用。因此,我可以调用new Processor(options)而不是编写_processorFactory.GetInstance(options),它可以作为依赖项注入。

现在当我上课时,我发现我为工厂制作了类,工厂类,接口和接口,这看起来有些过分。我甚至有一个工厂的多个实现,发现自己想要创建一个工厂工厂。我究竟做错了什么?班级何时应该有工厂?

3 个答案:

答案 0 :(得分:0)

我建议使用常识方法。如果为每一个班级写一个工厂似乎过多,那么它可能就是。为了测试能力和可维护性,您应该依赖于接口而不是具体类。

如果需要执行某些逻辑来获取值以传递给类的构造函数,请使用工厂。否则,您可以使用Inversion of Control容器(如MEF或Unity)创建类的实例。

https://msdn.microsoft.com/en-us/library/dd460648%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

http://www.c-sharpcorner.com/UploadFile/dacca2/inversion-of-control-using-unity/

答案 1 :(得分:0)

主要是工厂用于封装。

  • 您是一名图书馆/框架开发人员,您希望公开API但您不想发布对象的初始化方式。因此,您需要设计公共接口和内部实现。工厂将创建这些实现的实例,并以适当的方式初始化它们,消费者将能够通过公共接口与它们一起工作。

  • 您希望系统中的某些对象不应与实现耦合,因为某些实现细节可能会因某些条件或部署环境而异。因此,依赖关系以 interfaces 抽象类的形式提供,以避免对具体实现产生依赖。

可能还有许多工厂模式运行良好的其他场景,但它不是要编写工厂模式用例的百科全书!

因此,您不会为世界上的每一种类型创建工厂。

答案 2 :(得分:-3)

您不需要工厂来创建对象的实例。您可以使用Activator. CreateInstance

因此,如果您需要创建对象来做更多的事情,那么您真的只需要一个工厂类。