我面临着一个关于抽象工厂的问题,
class AbstractProductFactory{
public:
virtual ProductA* createProductA() = 0;
virtual ProductB* createProductB() = 0;
};我让ConcreteProductFactory类覆盖了这两个创建产品的成员函数。
当我需要添加一个新的ProductC创建时,我面临着一个问题。如果我添加一个新的虚函数ProductC* createProductC() = 0;,那么所有现有的ConcreteProductFactory类都需要修改,这也违反了open close原则。
解决此问题的最佳方法是什么?
发布于 2013-10-11 01:23:28
然后,您只需要为那些需要创建ProductC的类创建一个新接口。让新接口继承旧接口,修改这些类以继承新接口,然后在这些类上实现所需的方法。旧代码不会看到任何差异或更改。
class NextAbstractProductFactory: public AbstractProductFactory{
public:
virtual ProductA* createProductA() = 0;
virtual ProductB* createProductB() = 0;
virtual ProductC* createProductC() = 0;
};发布于 2013-10-11 01:20:34
当然,所有的concreteProductFactory都需要修改,这正是这些工厂的意义所在。
每个工厂以不同的方式创建相同的产品(与您正在使用的类相比相同)。
如果你不想这样做,你就不想使用抽象工厂模式。你到底想要达到什么目的?
https://stackoverflow.com/questions/19301892
复制相似问题