我在面试时遇到了这个问题,我不知道如何正确地回答它。问题是我们有一个家具系统,我们可以管理不同的家具。每件家具都有自己的material
(例如:木头,铁)和name
,type
(例如:椅子,书桌,桌子)。
对于每件家具,我们可以调用isFireApproved()
和getWeight()
。首先,我在顶部绘制名为Furniture
和Material
的基类。在家具下,我放置了不同类型的家具,如桌子,椅子,并对材料类做了同样的事情。如下图所示。
然后,我说,如果我们想要生产一件像woodchair
这样的新家具,我们可以创建一个名为woodchair
的新类,它继承了wood
类和chair
类。
然后,面试官问道,如果我们有成千上万种不同的家具怎么办?在这个架构中可能会发生什么以及如何解决它?我基本上停留在这里,回答说我们可以创建一个通用的类,将家具类型和材料传递到实例中。
例如:
wood_iron_wardrobe = CommonFurniture(type=[Wardrobe], materials=[Wood, Iron])
在构造函数中,我们使用这些参数来创建一件新的家具。基于面试的表情,我认为我没有回答正确的方向。对这个设计有什么建议吗?或者,对于学习OOD有什么建议吗?
发布于 2020-01-24 00:08:47
我想,就像你写的“我们可以创建一个新的类,叫做木椅,它继承了木材类和椅子类”,我想,他不喜欢为每种家具和材料的组合创建一个新类的想法,因为可能有大量的类。在这种情况下,人们可能更喜欢组合而不是继承。例如,Furniture
有一个Material
类型的成员/属性。因此,对于Furniture
,您需要m
混凝土类,对于Material,您需要n
类。对于继承,您将需要用于具体产品的m x n
类。
此外,Material
通常是静态的,您很少在Material
中更改任何内容。在许多语言中,多重继承是不可能的。在Java中,它可能如下所示:
enum Material (
WOOD (...),
IRON (...)
)
class Furniture {
Material material;
}
Furniture woodChair = new Chair(Material.WOOD);
Furniture ironChair = new Chair(Material.IRON);
这只是一个例子,你可以用更好的方式来实现它。
https://stackoverflow.com/questions/59869220
复制相似问题