使用工厂设计模式如何停止 class 必须预测它必须创建的 class 个对象

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

据我了解,工厂设计模式允许通过使用单独的对象来创建对象,其唯一目的是创建第一个对象。不同类型的工厂可以用来创建不同类型的对象。

我知道这隐藏了主要对象的实例化,但是这肯定只是被工厂的实例化取代了吗?

此设计模式的一个共同优点是它不再需要 class 预测它必须创建的 class 个对象。但是,如果工厂应该创建一个特定的 class,那么主 class 仍然需要预测要使用哪种工厂?

我想我误解了工厂的主要目的?

问题比看起来要复杂,因为工厂有很多种,所以客户端获取和调用它们的方式也不同。

  • Static Factory 的情况下,你是正确的:客户端保留对工厂 class 的具体依赖。这允许产品 class 被抽象。因此,通过预测工厂,客户不必预测工厂的确切输出。

  • Abstract Factory, the client has it injected as a dependency, which means it should be created in the composition root的情况下。所以客户既不知道具体的工厂class,也不知道具体的产品classes.

  • Factory Method 的情况下,客户端 工厂并为其父级提供具体产品以供消费。

工厂比这三个多,调用方式可能不同;但是这三个显示了工厂使用方式的差异有多么极端。