我在某处读到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'对象: -
换句话说,我喜欢将对象层次结构留给类设计,将对象创建留给工厂层并连接到逻辑层。
任何建议。
答案 0 :(得分:2)
对于初学者来说,这看起来可能会成为通常被称为“阶级爆炸”的东西。这些可以在任何时候成为一个mainenance夜间母马。
通过查看图表,几个类看起来应该是属性,而不是实际的类。例如,在轮胎层次结构中,为什么需要15英寸和17英寸的课程?这些课程提供什么样的状态或行为?为什么不在Tire类上添加一个size属性?也许甚至可以成为一个枚举。对于2Cyl,4Cyl和2Deck,4Deck类,可能会有同样的说法,尽管从提供的信息中很难说清楚。
在这种情况下,通常很好的做法是在可能的情况下优先考虑包含而不是继承,这通常被称为:优先关系是关系。这在Strategy design pattern中讨论,你可以在Head First Design Patterns一书中找到一个很好的例子。
我建议考虑这个建议并重新考虑你的设计。
答案 1 :(得分:0)
您需要一个所有层次结构都可以共享的公共类。
我建议使用Part类。这些可以由PartFactory生成。
然后汽车由零件组成。