据我了解,工厂设计模式允许通过使用单独的对象来创建对象,该对象的唯一目的是创建第一个对象。不同类型的工厂可以用来创建不同类型的对象。
我知道这隐藏了主要对象的实例化,但是这肯定只是被工厂的实例化所取代吗?
这种设计模式的一个共同优点是它使类不必预测它必须创建的对象的类。但是,如果工厂应该创建一个特定的类,那么主类仍然需要预测要使用哪种工厂?
我想我误解了工厂的主要目的?
最佳答案
问题比看起来更复杂,因为工厂有很多种,所以客户端获取和调用它们的方式也不同。
如果是 Static Factory你是对的:客户端保留对工厂类的具体依赖。这允许抽象产品类。因此,通过预测工厂,客户不必预测工厂的确切产量。
如果是 Abstract Factory ,客户端将其作为依赖项注入(inject),这意味着它应该在 composition root 中创建。因此客户端既不知 Prop 体的工厂类,也不知 Prop 体的产品类。
如果是 Factory Method ,客户端是工厂,并提供具体产品供其父级使用。
还有比这三个更多的工厂,它们的调用方式可能不同;但这三者显示了工厂使用方式上的差异有多么极端。
关于design-patterns - 使用工厂设计模式如何阻止类必须预测它必须创建的对象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62216961/