首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抽象工厂查询

抽象工厂查询
EN

Stack Overflow用户
提问于 2013-10-11 01:00:59
回答 2查看 91关注 0票数 1

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

代码语言:javascript
复制
 class AbstractProductFactory{
    public:
      virtual ProductA* createProductA() = 0;
      virtual ProductB* createProductB() = 0;
 };

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2013-10-11 01:23:28

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

代码语言:javascript
复制
class NextAbstractProductFactory: public AbstractProductFactory{
public:
  virtual ProductA* createProductA() = 0;
  virtual ProductB* createProductB() = 0;
  virtual ProductC* createProductC() = 0;
};
票数 1
EN

Stack Overflow用户

发布于 2013-10-11 01:20:34

当然,所有的concreteProductFactory都需要修改,这正是这些工厂的意义所在。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19301892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档