如何实现访问其他类对象的对象的想法?

时间:2011-12-16 00:33:52

标签: java oop class

说我想实现一个工作场所。有类Employee的对象,还有一个类WorkArrangement,就像一个盒子,员工在下周提交他们想要的班次。 (然后管理员清空该框并使用此信息安排下周的轮班)。

问题是,类Employee中的代码不知道对象box(类WorkArrangement),所以我不能写一个说“把你的下周轮班放在一边“。我可以将box对象作为参数发送到Employee的构造函数,但在OOP意义上它看起来像是一个糟糕的设计。

那么,这是一个糟糕的设计吗? 如果是,那么可能的解决方案是什么?

3 个答案:

答案 0 :(得分:1)

听起来更像是Box(可能只是一个列表)需要Shift s,而Employee有多个Shift s集合,{{1 }和desiredShifts

actualShifts然后查看每位员工的所需班次,调整周围的一切,并为每位员工分配实际班次,和/或将他们置于共享结构中,以便在公司日历中使用。

答案 1 :(得分:1)

恕我直言,我会使用事件驱动的逻辑(例如using property change listeners)。一旦Employee实例准备好提交所需的班次,就可以发起一个事件(例如PropertyChangeEvent)。在此事件对象中,传递班次信息和其他相关信息。从那里,接收者(即WorkArrangement)可以用这些信息做它喜欢的事情(例如,发出另一个通知Manager已经收到转移信息的变化事件。)

答案 2 :(得分:1)

直接的方法是让WorkArrangement拥有一个Employee提交请求的方法。 e.g。

public void requestShift(Employee employee, Shift requestedShift);

这样,Employeee不知道WorkArrangement如何或者什么对请求做了什么(他们可能会因为您所知道的而被扔进垃圾箱!)但它知道如何汇总请求。你可能需要一个参数来判断它是哪一周,但我更喜欢已经在WorkArrangement中,例如每周你为那一周构建一个新的WorkArrangement()。稍后,员工可以通过电话找到他们得到的信息:

 public Shift getActualShift(Employee employee);
顺便说一下,这引导我们找到一个比“工作安排”更好的名字,这并不意味着很多:像“WeeklySchedule”这样的东西。并非所有的类名都可以简单明了,但是当您设计的第一个类中有一个模糊名称时,这表明您没有走上正确的轨道。

如果你真的不希望WeeklySchedule知道Employee是什么,请注意该参数实际上只是用作标识符,在某些时候你将使用equals()(可能还有hashCode())。所以该参数可以是Object,整数或String employeeID等......