面试问题:控制冰箱行为的设计模式

时间:2011-07-01 13:56:20

标签: java design-patterns

最近在我的一次采访中,我被问到一个有趣的问题。

  

您的组织已经放置了一个冰箱供员工使用。但它观察到员工没有正确地打开或关闭那辆冰箱的门。例如。有些人会把它关闭,有些人可能会更多地将它关闭起来。所以现在你决定控制这两个动作。为这个问题创建一个设计。

我可以提出以下解决方案,但我对此不满意。

  1. 为冰箱对象定义两个打开和关闭状态。这些只是冰箱的对象。
  2. open()和close()将通过创建这些对象来控制行为。当然,他们将是最终的。
  3. 如果冰箱未处于有效状态,每个操作都会检查冰箱的状态,它会抛出UnSupportedOperation异常。
  4. 这是正确的解决方案还是可以有更好的方法?

5 个答案:

答案 0 :(得分:1)

我会计算门的速度和加速度。然后根据最小和最大阈值进行检查。当它几乎关闭并且有人将其关闭时,门必须具有最低速度并且不应超过最大速度等...

答案 1 :(得分:1)

我不会考虑打开和关闭状态,因为您只需关心冰箱是如何关闭的。

因此,每当门向关闭方向移动时,程序就会启动。 (然后已经涵盖了需要做的事情:速度控制,minSpeed等)

对于可配置状态问题,一旦您有一种(安全)方式来识别客户和员工,只需要让第二个程序在需要时打开和关闭“fridgeSaver”。

计划B:关闭程序并告诉您的员工今天他们不能使用冰箱,因为客户需要它。他们应该明白。 (对我来说,这是更好的让他们在打开冰箱时使用某种ID ......不考虑计算机视觉)

答案 2 :(得分:0)

我喜欢你的回答,这个问题有很多答案,我认为没有一个肯定正确的答案。我相信他们只是检查你的问题解决和设计技巧。

答案 3 :(得分:0)

扩展yi的想法,拥有一个开放和关闭的状态,看到冰箱在关闭前打开了多长时间,并且还有阈值。然后,当超过任何阈值时,您可以绑定监控或其他通知方案。

它只是在创造对话和想法。

答案 4 :(得分:0)

我认为采访者试图探索的是“抽象”和“数据隐藏”的知识。

当面试官问“有些人开始关闭”,“有些人推得超过需要”等等时,他所寻找的是抽象出一个叫做“关闭”的功能。

Fridge fridge = new Fridge();
fridge.close();

答案是 - 我会抽象出一个名为close()的函数,它将计算关闭冰箱门并关闭它所需的力。一旦我们这样做,即使你踢或推更多,close方法也会计算关闭和关闭它所需的力。

隐藏了实施方案。它可以在冰箱上实现一个简单的关闭按钮,它将使用电机的电源并将其关闭。或者无论用户施加什么样的力,它都会占用关闭所需的力,并且在不发出声音的情况下很好地关闭冰箱:)

封装:我不确定这在技术上是否算作一种模式(我暂时没有刷过它们),但这是一个很好的规则。基本上,封装意味着您应该只暴露使用对象或控件所需的内容,并且不要暴露可能最终创建不需要的依赖项的内容。通常,您拥有的依赖项越少越好。