How does using the factory design pattern stop a class having to anticipate the class of objects it must create

你离开我真会死。 提交于 2021-02-04 08:15:06

问题


As I understand it the factory design pattern allows objects to be created through the use of a separate object that's sole aim is to create the first one. Different types of factory can be used to create different types of object.

I understand that this hides the instantiation of the primary object however surely this is just replaced by the instantiation of the factory?

A common advantage for this design pattern is that it stops a class having to anticipate the class of objects it must create. However surely if the factory is supposed to create a specific class the main class still needs to anticipate what kind of factory to use?

I assume I'm misunderstanding the main purpose of a factory?


回答1:


The question is more complex than it seems, because there are many kinds of factories, so clients obtain and invoke them in different ways.

  • In the case of a Static Factory you are correct: the client retains a concrete dependency on a factory class. This allows the product class to be abstracted. So by anticipating the factory, the client doesn't have to anticipate the exact output of the factory.

  • In the case of an Abstract Factory, the client has it injected as a dependency, which means it should be created in the composition root. So the client knows neither the concrete factory class nor the concrete product classes.

  • In the case of a Factory Method, the client is the factory and provides a concrete product for its parent to consume.

There are more factories than these three, which may be invoked in different ways; but these three show how extreme the differences can be in the way factories are used.



来源:https://stackoverflow.com/questions/62216961/how-does-using-the-factory-design-pattern-stop-a-class-having-to-anticipate-the

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!