我遇到有关抽象工厂的问题,
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;
};