2011-12-26 8 views
0

6ヶ月前、私はThoughtWorksのインタビューを行い、コーディングラウンドに出かけました。 私のOO設計スキルを向上させたいデザインパターンを使用して最も安いホテルファインダーを実装する方法は?

私はヘッドファーストデザインパターンを読んで、共通のデザインパターンの基本的な考え方を知りました。 私は現在iOSで作業していますが、私はObjective Cを勉強していますが、動的言語を使ってさまざまなデザインパターンを適用し、物事を理解しています。

しかし、私はまだこのサンプルの問題で使用されているパターンの適切な選択が何であるかについて確かめたいと思います。

などのスキルを向上させるためのヒントになる場合があります。

ここに問題があります。

ホテルチェーンがあります。 LakeWood、Rosewood、xyzWoodの3つの枝があります。 とそのすべてが、曜日が平日か週末か、顧客が報酬か定期的かの組み合わせに応じて4種類の料金があります。

ユーザー入力は、ホテルとそのタイプのいずれかに滞在したいと思う一連の日付です。 出力は、宿泊施設全体で最も安い最高のホテルになるはずです。 ネクタイの場合は各ホテルの評価があり、評価の高い方はネクタイを決定します。 とプログラムは、新しいアルゴリズムを使用して最高のホテルを見つけることができるように、またホテルの構造が変更されたり、ホテルが追加されるように柔軟にする必要があります。

私はJavaに関して次のクラスで私たちに来ました。

  • ホテル:ホテルを戻すfinderメソッドを持っていた評価、名前、および速度の4種類
  • HotelFinderインタフェース。
  • このインターフェイスを実装し、顧客または顧客タイプのような属性を持つCheapestHotelFinderクラスは、列挙型[不明]および日付のリストである可能性があります。
  • おそらく、顧客の詳細が日付nタイプであり、この顧客がファインダに与えられているCustomerクラスです。
  • ホテルクラスに匹敵するインターフェイスを使用できる方法はありますか?
  • と私たちのためにすべての仕事をする予約システムシングルトンクラスです。

私はここに閉じ込められています。誰もが私のデザインを助けてくれることを願っています。

+0

Dooughworksは、 '本で' OO設計が必要ですか? :-O –

+0

わからない...しかし、一般的にどのようにあなたはそれをabtに行きますか? –

+2

私はアインシュタインのルールに従う傾向があります:「できるだけシンプルにするが、シンプルではない」。あなたのクラスのセットは大丈夫です。それらを実際に実装しようとしましたか? –

答えて

1

私はこの方針のためにストラテジー(http://en.wikipedia.org/wiki/Strategy_pattern)を選んだと思います。 "新しいアルゴリズムを使って最高のホテルを見つけることができるようにプログラムは柔軟でなければなりません"。

ホテルの種類ごとに異なる評価方法があるようですので、戦略はそれぞれのホテルを評価するさまざまな方法を持つ方法です。

このアプローチでは、データ(ホテルBean)を評価アルゴリズムから切り離すことになります(または、それを「特徴ベクトル関数」と呼ぶこともできます)。

0

私はここではテンプレートメソッドのパターンが適していると思います。 1.ホテルのインターフェイスを作成 2。3つのホテルのクラス(ホテルインタフェースを実装)レイクウッド、ローズウッドとxyzWood

  1. は現在、顧客のクラスを作成し、それはまた、一連の日付を持っています作成します。

    ここでは、顧客クラスとホテルクラスの両方が独立しています。

  2. メソッドを持つLogicInterfaceというインターフェイスが作成され、このメソッドは に渡され、パラメータとしてListホテルが渡され、もっとも安いホテルに戻ります。 LogicInterface.cheapホテルの検索ロジックを実装するクラスを作成します。 ここには ここではテンプレートメソッドパターンが使用されますが、後で最も安いホテル発見のため ロジックが変更されるため、新しいクラスが作成されますLogicInterface を実装すると、1回の改行だけで作業が完了します。コード変更が必要な場所はありません。

関連する問題