抽象工厂查询

时间:2013-10-10 17:00:59

标签: c++ oop design-patterns

我正面临抽象工厂的问题,

 class AbstractProductFactory{
    public:
      virtual ProductA* createProductA() = 0;
      virtual ProductB* createProductB() = 0;
 };

我有ConcreteProductFactory类覆盖创建产品的那两个成员函数。

当我需要添加新的ProductC创建时,我遇到了一个问题。如果我添加一个新的虚函数ProductC* createProductC() = 0;,那么所有现有的ConcreteProductFactory类都需要修改,这也违反了open close原则。

解决这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

然后,您只需要为需要创建ProductC的类创建新接口。让新接口继承旧接口,修改这些类以继承新接口,然后在这些类上实现所需的方法。旧代码不会发现任何差异或变化。

class NextAbstractProductFactory: public AbstractProductFactory{
public:
  virtual ProductA* createProductA() = 0;
  virtual ProductB* createProductB() = 0;
  virtual ProductC* createProductC() = 0;
};

答案 1 :(得分:0)

当然,所有concreteProductFactory都需要修改,这就是这些工厂的重点。

每个工厂以不同的方式创建相同的产品(与您当前使用的类别相比)。

如果你不想这样做,你不想使用抽象工厂模式。你究竟想要实现什么目标?