簡體   English   中英

設計模式建議

[英]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*

復合設計模式怎么樣?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM