【问题标题】:How to design this relationship between classes?如何设计类之间的这种关系?
【发布时间】:2019-09-16 20:17:56
【问题描述】:

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

“你有一所大学,它有员工,可以是学生也可以是老师。”

他们让我只设计员工的关系,所以我做了一个简单的继承图

然后他问我如果 Student 可以成为 Teacher 会发生什么,它不能从 Employee 和 Teacher 继承。我无法回答,所以他设计了一个带有 Role 类的解决方案。

另一个解决方案可能是使用装饰器模式?

我的第一个解决方案:

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

替代解决方案?

您如何看待这些方法?

谢谢

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

【问题讨论】:

  • codereview.stackexchange.com 可能更适合您的问题,但您可能还需要为您创建的每个图表提供 代码
  • 这是一个弱问题:“员工可以是要么学生教师”。他的解决方案允许没有任何角色的员工,除非员工必须是两个角色之一的不变量由“员工”对象的创建者强制执行。没有大学,他实际上使您的大学成为更好的解决方案;也就是说,从员工到学生或教师的不相交的专业化。 This question is similar.
  • 如果我在面试时你在答案中放弃了设计模式,我不会这么看。当你想说服人们相信你的知识时,总是从第一原则开始,设计模式是现成的答案,除非明确要求,否则应该避免。
  • 我的正确解决方案是this,因为问题的范围允许这样做。学生或老师只是一个人。如果用例是维护两者的注册表,则通过在实例化后将每个教师或学生添加到正确的“存储桶”中,此解决方案就可以正常工作。它还表明每个人对象都是相同的,无论他们添加到哪个桶。
  • @RWRkeSBZ 您的第一条评论实际上是正确答案。你应该这样发布。

标签: java oop design-patterns uml decorator


【解决方案1】:

这是一个弱问题:“员工可以是或者学生教师”。他的解决方案允许没有任何角色的员工,除非员工必须是两个角色之一的不变量由“员工”对象的创建者强制执行。与大学无关,他实际上使您的大学成为更好的解决方案;也就是说,从员工到学生或教师的不相交的专业化。 This question is similar.

【讨论】:

  • “员工可以是学生或教师”这与“员工学生或教师”有什么不同?也许“可以是”意味着员工并不总是学生或教师。
【解决方案2】:

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

使用从 Student/Teacher 到 Employee 的概括有时会给您带来麻烦,因为现在您无法模拟不是 Employee 的 Student

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

您将不得不在 Employee 类上添加一个额外的约束,但是以表明 Employee 应该是教师或学生(显然这所大学没有行政、清洁、维护......人员)

注意:这可能不是您的老师正在寻找的答案,但它是一种在现实世界中对这些事物进行建模的有用方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    相关资源
    最近更新 更多