如何设计类之间的这种关系?

时间:2019-04-27 16:17:34

标签: java oop design-patterns uml decorator

我最近有一个对象/类设计问题。问题是这样的:

  

“您有一所大学,它拥有员工,可以是学生或老师。”

他们要求我仅设计员工的关系,所以我制作了一个简单的继承图

然后他问我,如果学生可以成为教师,而不能继承员工和教师,会发生什么情况。我无法回答,所以他设计了一个带有Role类的解决方案。

另一种解决方法本来可以使用Decorator模式?

我的第一个解决方案:

enter image description here

他对多重继承问题的解决方案

enter image description here

替代解决方案?

enter image description here

您如何看待这些方法?

谢谢

编辑:我在YouTube上找到了一个视频,他们描述并解决了这个问题,他们使用了相同的基于角色的解决方案。 https://youtu.be/dYUZiJEy0JE?t=1252

2 个答案:

答案 0 :(得分:2)

这是一个很弱的问题:“雇员可以是学生还是教师。”他的解决方案允许没有任何角色的雇员,除非必须由“员工”对象的创建者强制使雇员成为两个角色之一的不变性。随着大学的发展,他实际上使您成为更好的解决方案。也就是说,从员工到学生或老师的专业相脱节。 This question is similar

答案 1 :(得分:0)

这看起来像是一种典型情况,可以使用 Party-PartyRole 模式解决。

使用从学生/教师到Employee的概括会在某些时候给您带来麻烦,因为现在您无法为不是 Employees的 Students 建模

enter image description here

此模式适用于各方可以参与的各种角色。

您将不得不在Employee类上添加一个附加约束,以表明该雇员应该是一名教师还是一名学生(显然这所大学没有行政,清洁,维护...等工作人员)

注意:这可能不是您的老师想要的答案,但这是在真实世界中为这些事物建模的一种有用方法。