为什么需要基地抽象工厂抽象工厂模式?
在抽象工厂模式中涉及的主要实体是
我已经看到了各种实现,并观察到客户端代码知道具体的工厂。 根据我在不同地方看到的模式的通用定义如下
定义创建对象的接口,但让子类决定实例化哪个类。
根据我的观察, createProduct
在抽象工厂方法中被实现为抽象方法。 它暴露了一个非抽象的公共方法,比如getProduct
从调用createProduct
方法的地方开始。 根据具体工厂类的运行时对象,相应地调用createProduct
。
即使基本抽象工厂类不存在,客户端代码也可以简单地在具体工厂类的对象上调用createProduct
方法,因为具体工厂类对客户端代码可见。
我觉得抽象基类只在以下情况下有用
如果我们有代码来创建具体工厂类的对象,而不是调用这些对象的getProduct
方法的代码。 实例化concrete Factory classes
代码可以将工厂放入某个队列中,然后可以迭代后面的队列并获得Concrete products
。
请提供您宝贵的意见。
客户不应该有任何具体工厂的知识。 抽象工厂应该隐藏工厂实现细节,允许不同的工厂进出,而不会影响客户。
建议AbstractFactory模式的目的是为了生产具体的工厂是错误的。 不幸的是,这些错误信息看起来很直观,所以不正确的定义在SO上猖獗,许多人都赞成。
这里的答案给了AbstractFactory一个很好的解释; 但要注意建议重复的评论。 链接线程中的答案会破坏对模式的任何理解。
抽象工厂不一定是抽象类,大多数时候它只是一个接口。
使用的具体工厂应该注入DI。 这样工厂的消费者不知道使用哪一个。
链接地址: http://www.djcxy.com/p/85119.html上一篇: Why base abstract factory is needed Abstract factory pattern?
下一篇: What is the difference between the template method and the strategy patterns?