[英]Design Pattern advice
我想知道是否有人可以幫助我。
假設我有一些類如下:
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中有一些類D的基指針,然后在類B中創建一個新的E,在類C中創建一個新的F.我想知道抽象工廠是否相似?
我希望這不會太混亂......如果沒有UML圖表,很難解釋!
你可以做到這一點:
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
的指針?
也許如果你編輯你的問題以更好地解釋你的目標,那么我們可以提供更有見地的答案。
完全像你說的那樣做錯了什么?
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> { };
請注意,由於協變返回類型 , AImpl::getD()
可以返回T*
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.