使用工厂设计模式如何停止 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 的情况下,客户端 是 工厂并为其父级提供具体产品以供消费。
工厂比这三个多,调用方式可能不同;但是这三个显示了工厂使用方式的差异有多么极端。
据我了解,工厂设计模式允许通过使用单独的对象来创建对象,其唯一目的是创建第一个对象。不同类型的工厂可以用来创建不同类型的对象。
我知道这隐藏了主要对象的实例化,但是这肯定只是被工厂的实例化取代了吗?
此设计模式的一个共同优点是它不再需要 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 的情况下,客户端 是 工厂并为其父级提供具体产品以供消费。
工厂比这三个多,调用方式可能不同;但是这三个显示了工厂使用方式的差异有多么极端。