0

我在某处读到 C++ OOPS 编程方式是“在工厂中构建对象,在逻辑中连接它们”。

我正面临一个应用程序设计问题。考虑有几个继承层次结构(有或没有虚函数): -

      Engine
        /\
       /  \
   Diesel Petrol
     /\      /\
    /  \    /  \
 2Cyl 4Cyl 2Cyl 4Cyl


       Audio
        /\
       /  \
 2Deck    4Deck



            Tyres
              /\
             /  \
        15Inch   17Inch
          /\       /\
         /  \     /  \
  tubeless Tube Tube Tubeless                     

  and more.... (System is scalable and new hierarchy may be added later on)

现在我有了这个应用程序界面,其中“汽车”对象是以挑选风格构建的,比如什么引擎类型?什么类型的座位?什么类型的音频?等等

任何想法,我如何设计这个系统,以便创建的“汽车”对象是:-

  1. 与所有零件层次结构不紧密耦合 支持向已创建的汽车添加新层次结构:假设我创建了一个“汽车”对象,轮胎为无内胎,后来在轮胎层次结构中有一个新的继承,我应该能够配置现有的'具有新轮胎类型的汽车对象。

换句话说,我喜欢将对象层次结构留给类设计,将对象创建留给工厂层,将布线留给逻辑层。

有什么建议么。

4

2 回答 2

2

对于初学者来说,这看起来可能会成为通常所说的类爆炸。这些很快就会成为维护的噩梦。

从您的图表来看,有几个类似乎应该是属性,而不是实际的类。例如,在轮胎层次结构中,为什么需要 15Inch 和 17Inch 类?这些类提供什么状态或行为?为什么不在轮胎类上放置一个尺寸属性?甚至可以将其设为枚举。2Cyl、4Cyl 和 2Deck、4Deck 类可能也是如此,尽管很难从提供的信息中分辨出来。

在这种情况下,通常的好习惯是尽可能选择包含而不是继承,这通常被称为:更喜欢 has-a 关系而不是 is-a 关系。这在策略设计模式中进行了讨论,您可以在Head First Design Patterns一书中找到一个很好的示例。

我建议考虑这个建议并重新考虑你的设计。

于 2013-05-09T17:24:32.953 回答
0

您需要一个所有层次结构都可以共享的公共类。

我会建议一个部分类。这些可以由 PartFactory 生成。

然后,汽车由零件组成。

于 2013-05-09T09:34:22.817 回答