抽象类的C ++工厂方法模式

时间:2011-06-09 15:21:52

标签: c++ abstract-class factory information-hiding

我必须在C ++中实现工厂方法模式。由工厂“组装”的类(C)是抽象的并且由其他类(D)继承。所以我不希望C有一个构造函数。但是要创建D的实例,C必须至少具有受保护的构造函数。但是有人可能从C派生并以这种方式创建C的实例。我不希望这种情况发生。所以我创建了一个受保护的构造函数,它接受一个指向C对象的指针以供派生类使用,代码如下。问题是这是否是处理这个问题的正确方法。

class C {
private:
 C() {}
protected:
 C(const C* c) {}
friend class CFactory
};

class D: public C
{
private:
 D(const C* c): C(c) {}
friend class CFactory;
};

class CFactory
{
public:
 static C* createC() {
  C* ptr = new C();
  ptr = new D(ptr); // There is garbage collection on the project, so no memory leak.
 }
};

2 个答案:

答案 0 :(得分:2)

给C一个私有构造函数并使D成为C的朋友类可能是更好的选择。

答案 1 :(得分:0)

您是否有理由在工厂中复制C对象?

如果不是:

C* ptr = new C();
ptr = new D(ptr);

你让D成为C的朋友,为D做了一个默认的构造函数,而且在工厂里只有:

ptr = new D();

这会简化事情。