Интервью Вопрос: Разработка шаблона для контроля поведения холодильника - PullRequest
4 голосов
/ 01 июля 2011

Недавно В одном из моих интервью мне задали интересный вопрос.

У вас есть холодильник, который был установлен вашей организацией для использования сотрудниками. Но заметили, что сотрудники не открывают и не закрывают двери этого холодильника. Например. Некоторые пинают его, чтобы закрыть, другие могут толкать его больше, чем нужно, чтобы закрыть его. Итак, теперь вы решили контролировать эти два действия. Создайте дизайн для этой проблемы.

Я мог бы предложить следующее решение, но я не удовлетворен им.

  1. Определить два состояния Открыть и Закрыть для объекта-холодильника. Это будут только предметы из холодильника.
  2. open () и close () будут управлять поведением, создавая эти объекты. Вне курса они будут окончательными.
  3. Каждая операция будет проверять состояние холодильника, если она не находится в допустимом состоянии, она выдаст исключение UnSupportedOperation.

Это правильное решение или может быть лучший способ?

Ответы [ 5 ]

1 голос
/ 01 июля 2011

Я бы не стал думать о состояниях «Открыто» и «Закрыто», поскольку вам нужно только позаботиться о том, как закрывается холодильник.

Таким образом, всякий раз, когда дверь движется в направлении закрытия, программа запускается. (То, что нужно сделать, уже было рассмотрено: управление скоростью, minSpeed ​​и т. Д.)

Для проблемы с настраиваемым состоянием, если у вас есть (безопасный) способ различать клиентов и сотрудников, достаточно просто включить и выключить вторую программу «fridgeSaver», когда это необходимо.

план Б: Отключите программу и скажите своим сотрудникам, что сегодня они не должны пользоваться холодильником, так как он нужен клиентам. Они должны понимать. (для меня это лучше, если они заставляют их использовать какой-то идентификатор, когда они открывают, используют холодильник ... не принимая во внимание компьютерное зрение в этом)

1 голос
/ 01 июля 2011

Я бы посчитал скорость и ускорение двери. Затем сравните его с минимальными и максимальными пороговыми значениями. Когда она почти закрыта, и кто-то закрывает ее, дверь должна иметь минимальную скорость, и она не должна превышать максимальную скорость и т. Д ...

0 голосов
/ 18 октября 2011

Я думаю, что интервьюер пытался изучить знания об «абстракции» и «сокрытии данных».

Поскольку интервьюер спросил: «Некоторые люди толкают, чтобы закрыть», «Некоторые люди толкают больше, чем нужно» и т. Д., Он искал, чтобы абстрагировать одну функцию под названием «Закрыть».

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

Ответ был бы - я бы абстрагировал функцию, называемую close (), которая будет вычислять, сколько усилий требуется, чтобы закрыть дверцу холодильника и закрыть ее. Как только мы сделаем это, даже если вы нажмете или нажмете еще раз, метод close вычислит, какое усилие необходимо, чтобы закрыть и закрыть его.

Реализация скрыта. Он может реализовать простую кнопку закрытия на холодильнике, которая будет использовать питание от двигателя и закрыть его. ИЛИ, какую бы силу ни прикладывал пользователь, он просто примет усилие, необходимое для закрытия, и аккуратно закроет холодильник, не издавая звуков

Инкапсуляция: Я не уверен, что это технически считается образцом (я давно не разбирался с ними), но это хорошее правило, чтобы жить. По сути, инкапсуляция означает, что вы должны раскрывать только то, что необходимо для использования объекта или элемента управления, и не раскрывать то, что может привести к созданию ненужных зависимостей. Как правило, чем меньше у вас зависимостей, тем лучше.

0 голосов
/ 01 июля 2011

Чтобы расширить идеи Йи, имея открытое и закрытое состояние, увидев, как долго холодильник открыт перед тем, как его закрыть, а также имея там пороги. Затем вы можете подключить мониторинг или другую схему уведомлений при превышении любого порога.

Это просто создание разговоров и идей.

0 голосов
/ 01 июля 2011

Мне нравится ваш ответ, , но на этот вопрос есть много ответов, и я не думаю, что есть однозначно правильный ответ.Я уверен, что они просто проверяли ваши навыки решения проблем и дизайна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...