正确的类层次结构

时间:2014-11-27 12:13:01

标签: oop design-patterns

一般情况下,我们有以下文档类型:

  • 带标题部分的文档(сlassDocumentHeader)
  • 包含标题和详细信息部分的文档(сlassDocumentDetail)

这两个类都是抽象的,我们需要继承它们才能实现所需的功能:

  • сlassDocumentHeader{}
  • class DocumentDetail:DocumentHeader {}

接下来,我们有具体的文件:

  • 合并订单。包含有关订单的合并数据(类订单)
  • 详细订单。包含合并数据和表格部分以及有关订购产品的详细信息(类OrderDetail)

所以,我们遇到了一个问题:

详细订单应从合并订单继承功能:

  • class OrderDetail:Order {}

详细订单和合并订单都应该从抽象类继承:

  • class Order:DocumentHeader {}
  • class OrderDetail:DocumentDetail {}

请提出一个想法,如何实现这一目标。谢谢!

1 个答案:

答案 0 :(得分:1)

我认为你应该考虑composition

Psuedo-ish代码就像是

class CDocument
{
  public:
    CDocument ( IDocumentHeader header, IDocumentDetails details ) : 
      this.header(header), this.details(details) {}

    IDocumentHeader GetHeader() { return header; }
    IDocumentDetails GetDetails() { return details; }

  private:
    IDocumentHeader header;
    IDocumentDetails details;
};

不完全确定您的订单/订单详细信息关系,但您可以将订单作为CDocument订购,其中包含DocumentHeader实现和DocumentDetails的OrderDetail实现。

class CDocumentHeader : IDocumentHeader{};

class COrderDetail : IDocumentDetail{};

void Whatever()
{
  CDocument order ( new DocumentHeader(), new OrderDetail() );
}