2011-07-01 5 views
4

最近私のインタビューの1つでは、面白い質問がありました。インタビュー質問:冷蔵庫の動作を制御するデザインパターン

従業員の使用のために組織によって入れられた冷蔵庫があります。しかし、従業員が冷蔵庫のドアを正しく開閉していないことがわかりました。例えば。いくつかは閉じるためにそれをキックする、いくつかはそれを閉じるために必要なことをより多く押すかもしれません。ですから、あなたはこれらの2つの動作を制御することに決めました。この問題の設計を作成します。

私は以下の解決策を考え出すことができましたが、私はそれに満足していません。

  1. 冷蔵庫オブジェクトの2つの状態を開くと閉じることを定義します。これらは冷蔵庫のみの対象となります。
  2. open()およびclose()は、これらのオブジェクトを作成して動作を制御します。オフコースでは最終決定となります。
  3. すべての操作は、有効な状態でない場合、UnSupportedOperation例外をスローします。

正しい解決策ですか、それとも良い方法がありますか?

+4

実際にあなたが解決しようとしている問題が何であるかは述べていません。 –

+0

これを正しく更新しました。 –

答えて

0

私はあなたの答えが好きです。しかし、この質問には多くの回答がありますが、確かに正解が1つはないと思います。私は彼らがあなたの問題解決とデザインスキルをチェックしていたと確信しています。

1

私はドアの速度と加速度を計算します。次に、最小しきい値および最大しきい値に照らしてチェックします。ドアが閉められて誰かがそれを閉じると、ドアは最小速度を持たなければならず、最大速度を上回ってはいけません。

+0

はい。つまり、オブザーバーも必要です。また、彼らは「今、私たちは顧客の訪問があると仮定して、それをオフにしたいと考えているが、従業員にとってはまだそこにいる」という問題を追加しています。これは構成可能な状態パターンになりますが、N個のそのような条件が存在する可能性があります。 –

0

オープンでクローズドな状態で、長い間、冷蔵庫は閉鎖される前に開いており、そこにも閾値がある。しきい値を超えた場合は、モニタリングやその他の通知方式を使用できます。

ちょうど会話とアイデアを作成しています。

1

冷蔵庫がどのように閉じられているか気にする必要があるので、私は開かれた状態と閉じた状態については考えません。

ドアが閉じる方向に動くと、プログラムが起動します。

設定可能な状態の問題については、クライアントと従業員を識別する(安全な)方法があれば、それだけで問題はありません。 2番目のプログラムは必要に応じて「fridgeSaver」をオン/オフします。

プランB:プログラムを無効にして、今日はクライアントに必要なので冷蔵庫を使用してはならないことを従業員に伝えます。彼らは理解する必要があります。 (私には、彼らが冷蔵庫を開けるときはいつでもIDの何らかのIDを使用する方がいいです...このコンピュータビジョンを考慮していない)

0

私はインタビュアーが探そうとしていたことは、 "と"データ隠蔽 "。面接官は「ある人が近づく」「何人かが必要以上にプッシュする」などと尋ねたので、彼が探していたのは「閉じる」という1つの関数を抽象化することでした。私は、抽象必要などのくらいの力を計算します近いという関数は、()冷蔵庫のドアを閉じて、それをクローズするだろう -

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

答えは次のようになります。これを行うと、たとえあなたがキックしたり、さらに押し込んだとしても、クローズメソッドは、クローズして閉じるために必要な力を計算します。

実装は非表示です。それは、モーターからの電力を使用してそれを閉じる、冷蔵庫上の簡単なクローズボタンを実装することができます。私は、これは技術的にパターンとしてカウントわからないんだけど(私は持っていない:ORユーザーは、それだけで終了するために必要な力がかかります適用となっ音:)

カプセル化せずにきれいに冷蔵庫を閉じ、強制的に何でもしばらくのうちにそれらを磨き上げた)が、それは生きる良い規則だ。基本的にカプセル化とは、オブジェクトやコントロールを使用するために必要なものだけを公開し、不要な依存関係を作り出す可能性のあるものを公開しないことです。通常、依存性が少ないほど良いでしょう。

関連する問題