1

我面临一个关于抽象工厂的问题,

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

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

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

克服这个问题的最佳方法是什么?

4

2 回答 2

1

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

class NextAbstractProductFactory: public AbstractProductFactory{
public:
  virtual ProductA* createProductA() = 0;
  virtual ProductB* createProductB() = 0;
  virtual ProductC* createProductC() = 0;
};
于 2013-10-10T17:23:27.757 回答
0

当然,所有的具体产品工厂都需要修改,这是这些工厂的重点。

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

如果你不想这样做,你就不想使用抽象工厂模式。你到底想达到什么目的?

于 2013-10-10T17:20:34.463 回答