有关如何将来自不同层次结构的对象组合在一起以创建新对象的任何想法

时间:2013-05-09 08:56:36

标签: c++ oop design-patterns

我在某处读到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)

现在我有了这个应用程序界面,其中'Car'对象是在挑选样式中构建的,就像Engine类型一样?什么类型的座位?什么类型的音频?等

任何想法,我如何设计这个系统,以便创建'Car'对象: -

  1. 没有紧密耦合到所有部件层次结构支持添加 已经创建汽车的新层次结构:说我创造了一个'汽车' 对象轮胎为无内胎,后来在轮胎层次结构中 是一个新的继承,我应该能够配置现有的'汽车' 具有新轮胎类型的物体。
  2. 换句话说,我喜欢将对象层次结构留给类设计,将对象创建留给工厂层并连接到逻辑层。

    任何建议。

2 个答案:

答案 0 :(得分:2)

对于初学者来说,这看起来可能会成为通常被称为“阶级爆炸”的东西。这些可以在任何时候成为一个mainenance夜间母马。

通过查看图表,几个类看起来应该是属性,而不是实际的类。例如,在轮胎层次结构中,为什么需要15英寸和17英寸的课程?这些课程提供什么样的状态或行为?为什么不在Tire类上添加一个size属性?也许甚至可以成为一个枚举。对于2Cyl,4Cyl和2Deck,4Deck类,可能会有同样的说法,尽管从提供的信息中很难说清楚。

在这种情况下,通常很好的做法是在可能的情况下优先考虑包含而不是继承,这通常被称为:优先关系是关系。这在Strategy design pattern中讨论,你可以在Head First Design Patterns一书中找到一个很好的例子。

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

答案 1 :(得分:0)

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

我建议使用Part类。这些可以由PartFactory生成。

然后汽车由零件组成。