我遇到有关抽象工厂的问题,

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

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

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

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

最佳答案

然后,仅需要为那些需要创建ProductC的类提供一个新接口(interface)。让新接口(interface)从旧接口(interface)继承,修改这些类以继承新接口(interface),然后在这些类上实现所需的方法。旧代码看不到任何差异或更改。

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

10-08 04:48