设计模式建议

时间:2011-01-19 23:08:53

标签: c++ oop design-patterns inheritance class-design

我想知道是否有人可以帮助我。

假设我有一些类如下:

class A { ... };

class B : public A { ... }

class C : public A { ... };

class D { ... };

class E : public D { ... };

class F : public D { ... };

现在我希望类B有一个E类型的对象作为成员,C类要有一个F类型的对象作为成员。

是否有一个很好的设计模式,我可以在类A中使用某种类型的基类指针,然后在类B中创建一个新的E,在类C中创建一个新的F.我想知道抽象工厂是否类似?

我希望这不会太混乱......没有UML图表很难解释!

3 个答案:

答案 0 :(得分:2)

你可以做到这一点:

class D
{
public:
    D(const A *p) : p_(p) {}
    virtual ~D() { delete p_; }
private:
    const A *p_;
};

class E : public D
{
public:
    E() : D(new B) {}
};

有很多更好的方法,取决于你想要达到的目标。例如,为什么D需要包含指向A

的指针

也许如果你编辑你的问题以更好地解释你的目标,那么我们可以提供更有见地的答案。

答案 1 :(得分:2)

完全像你说的那样做错了什么?

class A
{
    A(D* p) : ptr(p) {}
    D* ptr;
};

class B : public A
{
    B() : A(new E) {}
};

class C : public A
{
    C() : A(new F) {}
};

如果想要更好地自动化它,可以使用中间模板类。

class A
{
    virtual D* getD();
};

template <class T>
class AImpl : public A
{
    AImpl() : m_d(new T) {}
    T* getD() { return m_d; }
    T* m_d;
};

class B : public AImpl<E> { };

class C : public AImpl<F> { };

请注意,由于covariant return typesAImpl::getD()可以返回T*

答案 2 :(得分:0)

复合设计模式怎么样?

http://en.wikipedia.org/wiki/Composite_pattern